30

何らかの理由で、このコードは、1 つだけ (11.3) を印刷しようとすると、配列内の最大値の 3 つの値を印刷しています。誰かがなぜこれをしているのか説明してもらえますか?

ありがとう。

import java.util.Scanner;

public class Slide24
{
    public static void main (String [] args)
    {
        Scanner in = new Scanner(System.in);

        double[] decMax = {-2.8, -8.8, 2.3, 7.9, 4.1, -1.4, 11.3, 10.4,
            8.9, 8.1, 5.8, 5.9, 7.8, 4.9, 5.7, -0.9, -0.4, 7.3, 8.3, 6.5, 9.2,
            3.5, 3, 1.1, 6.5, 5.1, -1.2, -5.1, 2, 5.2, 2.1};

        double total = 0, avgMax = 0;

        for (int counter = 0; counter < decMax.length; counter++)
        {
         total += decMax[counter];
        }

        avgMax = total / decMax.length;

        System.out.printf("%s %2.2f\n", "The average maximum temperature for December was: ", avgMax);

        //finds the highest value
        double max = decMax[0];

        for (int counter = 1; counter < decMax.length; counter++)
        {
         if (decMax[counter] > max)
         {
          max = decMax[counter];
          System.out.println("The highest maximum for the December is: " + max);
         }

        }        
    }
}
4

20 に答える 20

42

現在の最大値よりも大きい数値が見つかるたびに数値が出力されます (この場合、たまたま 3 回発生します)。出力を for ループの外に移動すると、うまくいくはずです。

for (int counter = 1; counter < decMax.length; counter++)
{
     if (decMax[counter] > max)
     {
           max = decMax[counter];
     }
}

System.out.println("The highest maximum for the December is: " + max);
于 2009-11-27T04:59:06.683 に答える
9

それらをすべてスキャンした後、最大値を出力する必要があります。

for (int counter = 1; counter < decMax.length; counter++)
{
    if (decMax[counter] > max)
    {
        max = decMax[counter];
        // not here: System.out.println("The highest maximum for the December is: " + max);
    }
}  
System.out.println("The highest maximum for the December is: " + max);
于 2009-11-27T04:57:23.347 に答える
6

配列に関するさまざまなアクションを実行するための最も迅速で簡単な方法を探している場合、Collections クラスの使用が非常に役立ちます (ドキュメントはhttps://docs.oracle.com/javase/7/docs/api/から入手できます)。 java/util/Collections.html )、アクションの範囲は、最大値、最小値の検索、並べ替え、逆順などです。

コレクションを使用して配列から最大値を見つける簡単な方法:

Double[] decMax = {-2.8, -8.8, 2.3, 7.9, 4.1, -1.4, 11.3, 10.4, 8.9, 8.1, 5.8, 5.9, 7.8, 4.9, 5.7, -0.9, -0.4, 7.3, 8.3, 6.5, 9.2, 3.5, 3.0, 1.1, 6.5, 5.1, -1.2, -5.1, 2.0, 5.2, 2.1};
List<Double> a = new ArrayList<Double>(Arrays.asList(decMax));
System.out.println("The highest maximum for the December is: " + Collections.max(a));

最大値を見つけるのと同様に、最小値を見つけることに興味がある場合:

System.out.println(Collections.min(a));

リストをソートする最も簡単な行:

Collections.sort(a);

または、代わりに Arrays クラスを使用して配列をソートします。

Arrays.sort(decMax);

ただし、Arrays クラスには最大値を直接参照するメソッドがなく、ソートして最後のインデックスを参照するのが最大値ですが、上記の 2 つのメソッドによるソートは O(n log n) の複雑さがあることに注意してください。 .

于 2016-05-01T04:35:36.577 に答える
5

他の人が提案したのと同じですが、それを行うためのよりクリーンな方法に言及するだけです:

int max = decMax[0];
for(int i=1;i<decMax.length;i++)
    max = Math.max(decMax[i],max);
System.out.println("The Maximum value is : " + max);
于 2016-09-26T03:15:14.700 に答える
1

ループ内にprint()ステートメントがありますfor()。一度だけ印刷されるように、後にする必要があります。現在の方法では、最大値が変更されるたびにmax.

于 2009-11-27T04:58:35.280 に答える
1

配列の最大値を持つ短い解決策:

double max = Arrays.stream(decMax).max(Double::compareTo).get();
于 2017-02-06T13:35:26.293 に答える
0

最大数を見つける簡単な方法

   int arr[] = {10, 11, 12, 13, 55, 18, 20};
    int num = arr.length;
    int max = 0;

    for (int i = 0; i < num; i++) {
        if (arr[i] > max) {
            max = arr[i];

        }

    }
    System.out.println(max);
于 2021-05-06T15:20:53.603 に答える