0

Liang による Java プログラミング 9e の紹介で Java を学んでいます。double result = numbers[0] のように、numbers[0] が必要なのはなぜですか? 私が意味するのは括弧内ですが、なぜ0でなければならないのですか?

public class VarArgsDemo {

    public static void main(String[] args) {
        printMax(34, 3, 3, 2, 56.5);
        printMax(new double[] {1, 2, 3});
    }

    public static void printMax(double... numbers) {
        if (numbers.length == 0) {
        System.out.println("No arguments passed");

    return;
        }

    double result = numbers[0];

    for (int i = 1; i < numbers.length; i++)
        if (numbers[i] > result)
            result = numbers[i];

    System.out.println("The max value is " + result);
    }
}
4

2 に答える 2

1

あなたはこれが何を意味するかについて尋ねます:

    double result = numbers[0];

numbersそれだけで、配列の最初の要素を に代入しているだけresultです。ゼロはインデックス値です。

値 0 を使用する理由は、Java (およびほとんどのプログラミング言語!) では、配列が 1 からではなく 0 からインデックス付けされるためです。たとえば、

   double[] array = new double[] {1.0, 2.0, 3.0};

3長さ、インデックス01およびの配列を作成しています2。もちろん、 の値はarray[0]です1.0


次にコンテキストを見ると、このステートメントに続くループは、numbers配列の他の要素を 1 つから最後の要素 (すなわちnumbers.length - 1) まで調べ、それらを と比較していresultます。

したがって、その点から、あなたが求めているステートメントは、アルゴリズムを「プライミング」することです...開始するためにポンプを「プライミング」するように。


numbers[0] が最初の値になるアルゴリズムを準備すると、for ループが int i = 1 で始まり、i = 3 まで増加すると、これはどのように機能しますか。number[0] はどうなりますか?

  • 配列に 3 つの要素がある場合、ループは に達すると終了します。i3

  • このステートメントが何をしているのかを理解してみてください。

    if (numbers[i] > result)
        result = numbers[i];
    
  • 辛辣に...には何も起こりませんnumbers[0]。あなたはそれに何も割り当てていません!に値を割り当てていますresult。それに何が起こるかに焦点を当てます

于 2013-10-12T02:41:36.733 に答える