質問: 0) { // evenSum += numbers[i]; // } else { // oddSum += numbers[i]; // } // } System.out.println("奇数の和は" + oddSum + "です"); System.out.println("偶数の和は" + evenSum + "です"); } }
回答: ``` for (int number : numbers) { if (number % 2 == 0) { evenSum += number; } else { oddSum += number; } } ``` ループして要素を取り出す対象の変数が配列の場合は、上のように書くとjavaコンパイラーが以下のようなバイトコードを生成する(.classファイルを作成する)と理解すれば良いと思います。 ``` for (int i = 0; i < numbers.length ; i++) { int number = numbers[i]; if (number % 2 == 0) { evenSum += number; } else { oddSum += number; } } ``` このうちの最初の1行は配列の要素を最初から最後まで取り出して処理する場合には決まり切った形なので、これを簡略化した文法(シンタックス・シュガーなどと表現されることもあります)をJava SE 5で追加しました。 その文法の中では添字で取り出した各要素を代入する変数を `for (int number :` のような形で宣言することで添字を使った配列の参照をしないで済むようにしてあります。 こうすることで、コードを書く量が減るのと共に、添字の変数の取り扱いに起因するバグ(ループ中に値を変えてしまうなど)を未然に防ぐ効果もあります。