Javaのforeachとは何ですか?
For-each は、配列またはコレクションのすべての要素を処理する必要がある場合に使用される for ループの一種です。「for each」は英語から「forEveryone」と訳されます。実際には、foreach というフレーズ自体はこのサイクルでは使用されません。その構文は次のとおりです。for (type itVar : array)
{
Блок операторов;
}
ここでtype
、 は反復変数の型 (配列内のデータ型と同じです!)、itVar
はその名前、array
は配列 (別のデータ構造、ある種のコレクション、たとえばArrayList
) です。ループが実行されるオブジェクト。ご覧のとおり、この設計ではカウンターは使用されておらず、反復変数はインデックス値ではなく、配列またはコレクションの要素を反復処理します。このようなループを実行すると、反復変数に配列またはコレクションの各要素の値が順番に割り当てられ、その後、指定されたステートメントのブロック (またはステートメント) が実行されます。
for-each ループとは別に、Java には forEach() メソッドもあります。これについては、たとえば「サイクルを書くのをやめよう!」という記事で読むことができます。Java 8 でコレクションを操作するためのベストな方法トップ 10」 |
for (int i=0; i<array.length; i++)
{
Блок операторов;
}
Java foreachの例
学生の成績の配列を作成してみましょう。次に、for-each を使用して、すべてのスコアを出力し、平均スコアを表示し、それらの最大値を見つけます。public class ForEachTest {
//method that prints all grades
public static void printAllGrades(int[] grades) {
System.out.print("|");
for (int num : grades) {
System.out.print(num + "|");
}
System.out.println();
}
//method that displays the average score
public static double midGrade(int[] numbers) {
int grade = 0;
for (int num : numbers) {
grade = num + grade;
}
return ((double) grade / numbers.length);
}
//method in which the best (maximum) score is calculated
public static int bestGrade(int[] numbers) {
int maxGrade = numbers[0];
for (int num : numbers) {
if (num > maxGrade) {
maxGrade = num;
}
}
return maxGrade;
}
public static void main(String[] args) {
//array of ratings
int[] grades = {5, 10, 7, 8, 9, 9, 10, 12};
int highest_marks = bestGrade(grades);
System.out.print("All the grades: ");
printAllGrades(grades);
System.out.println("The highest grade is " + highest_marks);
System.out.println("The average grade is " + midGrade(grades));
}
}
プログラム出力:
All the grades: |5|10|7|8|9|9|10|12|
The highest grade is 12
The average grade is 8.75
ここで、通常の for ループを使用してすべてのスコアを出力する方法がどのようなものになるかを見てみましょう。
public static void printAllGrades(int[] grades) {
System.out.print("|");
for (int i = 0; i < grades.length; i++) {
System.out.print(grades[i] + "|");
}
System.out.println();
}
このメソッドをメソッドから呼び出すとmain
、結果が得られます。
All the grades: |5|10|7|8|9|9|10|12|
コレクションでの for-each ループの使用例
名前のコレクションを作成し、すべての名前を画面に表示してみましょう。List<String> names = new ArrayList<>();
names.add("Snoopy");
names.add("Charlie");
names.add("Linus");
names.add("Shroeder");
names.add("Woodstock");
for(String name : names){
System.out.println(name);
}
for-each ループの制限事項
for-each のコンパクトな形式は for よりも読みやすいと考えられており、可能な場合には for-each を使用することをお勧めします。ただし、for-each は通常の for よりも汎用性が低い構造です。ここでは、for-each の使用がまったく機能しない、または機能するものの困難を伴う単純なケースをいくつか示します。-
ループを最後から最初まで実行したい場合。つまり、次のコードに直接類似する for-each はありません。
for (int i = array.length - 1; i >= 0; i--) { System.out.println(array[i]); }
-
For-each は、配列に変更を加えたい場合には適していません。たとえば、要素を交換せずに配列を並べ替えることはできません。または、次のコードでは、変更されるのは配列要素ではなく、反復変数のみです。
for (int itVar : array) { itVar = itVar++; }
-
配列内の要素を検索していて、探している要素のインデックスを返す (または渡す) 必要がある場合は、通常の for ループを使用することをお勧めします。
JavaRush の学生が作成した for-each に関する役立つビデオ
JavaRush コースのループJavaRush では、Java 構文クエストのレベル 4から実際にループを使用し始めます。それらに特化したいくつかの講義と、それらを扱うスキルを強化するためのさまざまなレベルの多くのタスクがあります。一般に、ループはプログラミングにおいて最も重要な構成要素の 1 つであるため、ループから逃れることはできません。 |
for-each およびループの詳細:
- For および For-Each ループ: 私がどのように反復し、反復したが、反復しなかったかの物語- Java の for および for-each ループに関する詳細な記事。訓練を受けた読者 (JavaRush レベル 10 以上) 向けに設計されています。
- While ステートメント。
while
この記事では、JavaRush のサイクルについて学び始める最も単純なサイクルについて説明します。 - サイクルを書くのはやめてください! Java 8 でコレクションを操作するためのベスト 10 のメソッド。すでにコースの半分以上を完了している JavaRush の学生は、この記事からコレクションの操作について多くのことを学ぶことができます。
GO TO FULL VERSION