web-dev-qa-db-ja.com

変数セットの最大値を見つける方法

誰かが変数のセットの最大値を見つけて別の変数に割り当てるのを手伝ってくれるのではないかと思っていました。以下は、私が話していることを理解するのに役立つかもしれない私のコードの断片です。

// 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 + ".");
13
Cody B

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);
24
nybbler

すべてを支配する1つの方法

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;
}
4
mfc

プリミティブ変数では、おそらく配列またはコレクションを使用するのが最適です。

配列:

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());
    }
}

これはもっと複雑かもしれませんが、オブジェクトを操作する場合は、作業した方が良いと思います。

2
Eldius
double [ ] data = { firstQuarter , secondQuarter , thirdQuarter , fourtQuarter ) ;
Arrays . sort ( data ) [ 3 ] ;
1
emory

パーティーに少し遅れましたが、この質問を見ている他の人のために、Java 8にはこれを実装するプリミティブストリームタイプがあります

_Collection<Integer> values = new ArrayList<>();
OptionalInt max = values.stream().mapToInt((x) -> x).max();
_

mapToIntは、入力を整数型に変換する方法を説明するキー関数です。結果のストリームには、整数型に固有の追加のアグリゲーターとコレクターがあり、その1つはmax()です。

操作が成功した場合、OptionalIntから結果値を抽出できます

1
brendon

Java 8で最も簡潔なバージョンは次のようになります。

DoubleStream.of(firstQuarter , secondQuarter , thirdQuarter , fourtQuarter).max();
1
arjabbar
Max = firstQuarter;
If(secondQuarter > max)
   Max = secondQuarter;

... 等々

0
Rado