Как найти максимальное значение множества переменных
Мне было интересно, сможет ли кто-нибудь помочь мне найти максимальное значение набора переменных и назначить их другой переменной. Вот фрагмент моего кода, который может помочь понять, о чем я говорю.
// Ask for quarter values.
System.out.println("What is the value of the first quarter?");
firstQuarter = input.nextDouble();
System.out.println("What is the value of the second quarter?");
secondQuarter = input.nextDouble();
System.out.println("What is the value of the third quarter?");
thirdQuarter = input.nextDouble();
System.out.println("What is the value of the fourth quarter?");
fourthQuarter = input.nextDouble();
//Tell client the maximum value/price of the stock during the year.
//maxStock = This is where I need help
System.out.println("The maximum price of a stock share in the year is: $" + maxStock + ".");
Ответы
Ответ 1
В Java вы можете использовать Math.max следующим образом:
double maxStock = Math.max( firstQuarter, Math.max( secondQuarter, Math.max( thirdQuarter, fourthQuarter ) ) );
Не самый элегантный, но он будет работать.
В качестве альтернативы для более надежного решения определите следующую функцию:
private double findMax(double... vals) {
double max = Double.NEGATIVE_INFINITY;
for (double d : vals) {
if (d > max) max = d;
}
return max;
}
Коды вы можете позвонить по:
double maxStock = findMax(firstQuarter, secondQuarter, thirdQuarter, fourthQuarter);
Ответ 2
Один метод для их правильного управления
public static <T extends Comparable<T>> T max(T...values) {
if (values.length <= 0)
throw new IllegalArgumentException();
T m = values[0];
for (int i = 1; i < values.length; ++i) {
if (values[i].compareTo(m) > 0)
m = values[i];
}
return m;
}
Ответ 3
С примитивными переменными лучший выбор может быть с массивами или коллекциями:
Массивы:
double [ ] data = { firstQuarter , secondQuarter , thirdQuarter , fourtQuarter ) ;
Arrays . sort ( data ) [ 3 ] ;
Коллекции:
List<Double> data = new Arraylist<Double>();
data.add(firstQuarter);
data.add(secondQuarter);
data.add(thirdQuarter);
data.add(foutQuarter);
Collections.sort(data);
data.get(3);
И если вы работаете с объектами, вы можете использовать Коллекции со компаратором:
class Quarter {
private double value;
private int order;
// gets and sets
}
И чтобы получить максимальное значение:
List<Quarter> list = new ArrayList<Quarter>();
Quarter fisrt = new Quarter();
first.setValue(firstQuarter);
first.setOrder(1);
list.add(first);
// Do the same with the other values
Collections.sort(list, new Comparator<Quarter>(){
compare(Object o1, Object o2){
return Double.valueOf(o1.getValue()).compareTo(o2.getValue());
}
}
Это может быть более сложным, но если вы работаете с объектами, я думаю, что лучше работать.
Ответ 4
double [ ] data = { firstQuarter , secondQuarter , thirdQuarter , fourtQuarter ) ;
Arrays . sort ( data ) [ 3 ] ;
Ответ 5
Немного поздно для вечеринки, но для кого-либо другого, рассматривающего этот вопрос, java 8 имеет примитивные типы потоков, которые реализуют именно этот
Collection<Integer> values = new ArrayList<>();
OptionalInt max = values.stream().mapToInt((x) -> x).max();
mapToInt
- ключевая функция, которая описывает, как преобразовать ввод в целочисленный тип. Результирующий поток затем имеет дополнительные агрегаторы и коллекторы, специфичные для целочисленных типов, один из которых max()
.
Затем результат результата можно извлечь из OptionalInt
, если операция прошла успешно
Ответ 6
Теперь я верю в Java 8, самая краткая версия будет выглядеть так:
DoubleStream.of(firstQuarter , secondQuarter , thirdQuarter , fourtQuarter).max();
Ответ 7
Max = firstQuarter;
If(secondQuarter > max)
Max = secondQuarter;
... И так далее
Ответ 8
import java.util.Scanner;
public class dmar {
public static void main ( String [] srgs){
Scanner dmar=new Scanner(System.in);{
{
System.out.println ( "inter number of x plz") ;
double x=dmar.nextDouble();
System.out.println ( "inter number of y plz") ;{
double y=dmar.nextDouble();
System.out.println ( "inter number of t plz") ;
double t=dmar.nextDouble();
System.out.println ( "inter number of f plz") ;
double f=dmar.nextDouble();
{
{
if (x>y);
System.out.println("x biger than y");
if (x>t);
System.out.println("x biger than t");
if (x>f);
System.out.println("x biger than f");
if (y>x);
System.out.println("y biger than x");
if (y>t);
System.out.println("y biger than t");
if (y>f);
System.out.println("y biger than f");
if (t>x&t>f&t>y);
System.out.println("t biger than x");
if (t>y);
System.out.println("t biger than y");
if (t>f);
System.out.println("t biger than f");
if (f>x);
System.out.println("f biger than x");
if (f>y);
System.out.println("f biger than y");
if (f>t);
System.out.println("f biger than t");
}