CodeGym /Java Blog /ランダム /Java の For-each ループ
John Squirrels
レベル 41
San Francisco

Java の For-each ループ

ランダム グループに公開済み

for-each ループとは何ですか?

for -each は、配列またはコレクションのすべての要素を処理する必要がある場合に使用するforループの一種です。とはいえ、このループでは実際にはfor-eachフレーズは使用されません。その構文は次のとおりです。

for (type itVar : array) 
{ 
    // Operations
}
type反復子変数の型 (配列内の要素のデータ型と一致します!)、itVarはその名前、arrayは配列です ( ArrayListなどのコレクションなど、他のデータ構造も使用できます) )、つまりループが実行されるオブジェクトです。ご覧のとおり、この構造はカウンターを使用しません。反復子変数は単に配列またはコレクションの要素を反復処理します。このようなループが実行されると、反復変数に配列またはコレクションの各要素の値が順番に割り当てられ、その後、指定されたステートメントのブロック (またはステートメント) が実行されます。

for-each ループに加えて、Java には forEach() メソッドもあります。これについては、 「ループの作成をやめてください!」というタイトルの記事で読むことができます。Java 8 でコレクションを操作するためのベスト プラクティス トップ 10

ノート:for -eachループは、配列およびjava.lang.Iterableインターフェースを実装するクラスに適用できます。次のforループは上記のコードと等価です。

for (int i=0; i < array.length; i++) 
{ 
    
    // Statements 
}

for-each ループの例

学生のスコアの配列を作成します。次に、 for-eachループを使用してすべての推定値を出力し、平均スコアを計算し、最高スコアを見つけます。

public class ForEachTest {
    
// A method that prints all scores     
public static void printAllScores(int[] scores) {
        System.out.print("|");
        for (int num : scores) {

            System.out.print(num + "|");
        }
        System.out.println();
    }

// A method that displays the average score 
    
public static double getAverageScore(int[] numbers) {
        int totalScore = 0;

        for (int num : numbers) {
            totalScore = num + totalScore;
        }
        return ((double) totalScore / numbers.length);

    }
// A method that determines the best (maximum) score 
    public static int getBestScore(int[] numbers) {
        int maxScore = numbers[0];

        for (int num : numbers) {
            if (num > maxScore) {
                maxScore = num;
            }
        }
        return maxScore;
    }

public static void main(String[] args) {
      
// Array of scores 
int[] scores = {5, 10, 7, 8, 9, 9, 10, 12};

        
  int bestScore = getBestScore(scores);
        System.out.print("All the scores: ");
        printAllScores(scores);
        System.out.println("The highest score is " + bestScore);
        System.out.println("The average score is " + getAverageScore(scores));
    }

}
プログラム出力:

All the scores: |5|10|7|8|9|9|10|12|
The highest score is 12
The average score is 8.75
ここで、通常のforループ を使用した場合にすべてのスコアを出力する方法がどのようになるかを見てみましょう。

public static void printAllScores(int[] scores) {
        System.out.print("|");
        for (int i = 0; i < scores.length; i++) {

            System.out.print(scores[i] + "|");
        }
        System.out.println();
    }
このメソッドをmainメソッドから呼び出すと、次の結果が得られます。

All the scores: |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ループがまったく機能しない、または機能するものの困難が伴うという 単純なケースをいくつか示します。
  1. ループを最後から最初まで実行したい場合。つまり、次のコードに直接類似するfor-eachループはありません。

    
    for (int i= array.length-1; i>0; i--) 
    {
          System.out.println(array[i]);
    }
    
  2. For-each は、配列に変更を加えたい場合には適していません。たとえば、要素の位置を変更せずに配列を並べ替えることはできません。さらに、次のコードでは、配列の要素ではなく、反復子変数のみが変更されます。

    
    for (int itVar : array) 
    {
        itVar = itVar++; 
    }
    
  3. 配列内の要素を探していて、探している要素のインデックスを返す (または渡す) 必要がある場合は、通常の for ループを使用することをお勧めします

for-each ループに関する役立つビデオ

CodeGym コースのループ

CodeGym では、Java 構文クエストのレベル 4でループを使用する練習を開始します。そのレベルのレッスンのいくつかとさまざまなレベルのタスクの多くは、ループを扱うスキルを強化するためにループに特化しています。基本的に、ループを回避する方法はありません。ループはプログラミングにおいて最も重要な構成要素の 1 つです。

for-each ループおよびその他のループに関する詳細情報

  1. while ステートメント。この記事では、最も単純な種類のループ、whileつまり CodeGym が学生にループを紹介するために使用するループについて説明します。
  2. ループを書くのはやめてください。Java 8 でコレクションを操作するためのトップ 10 のベスト プラクティス。この記事は、少なくともコースの途中まで進んだ CodeGym の学生が、コレクションの操作について多くの興味深いことを学ぶのに役立ちます。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION