for ステートメントは、プログラムを実行する前に条件式が true であるかどうかを最初に判断する必要があるループ ステートメントです。条件式の結果が false の場合、そのループ ステートメントはまったく実行されません。 for ステートメントは通常、反復回数がわかっているループ内で使用されます。
for ステートメントの構文形式は次のとおりです。
for(条件式1;条件式2;条件式3) {
ステートメントブロック;
}
for ループ内の 3 つの条件式の意味を表 1 に示します。
表現 | 形状 | 関数 | 例 |
---|---|---|---|
条件式1 | 代入文 | ループ構造の最初の部分。ループ変数に初期値を代入します。 | int i=1 |
条件式2 | 条件文 | ループ構造のループ条件 | i>40 |
条件式3 | 反復ステートメント、通常は使用 ++ または — 演算子 |
ループ構造の反復部分。通常はループ変数の値を変更するために使用されます。 | i++ |
for キーワードの後の括弧内の 3 つの条件式は「;」で区切る必要があります。 for ループ内のこれら 3 つの部分と中括弧内の 4 つのコンポーネントは、ループ本体をわかりやすくシンプルにまとめます。
for ループ文の実行手順は、まず条件式 1 を実行して初期化し、条件式 2 の値が真かどうかを判定し、真の場合はループ本体の文ブロックを実行し、そうでない場合は直接ループを終了します。最後に式 3 を実行してループ変数の値を変更し、ループを終了します。次に、条件式 2 の値が false になるまで次のサイクルが実行され、サイクルが終了します
for ループのループ反復ステートメントはループ本体と一緒に組み込まれていないため、ループ本体を実行してループを終了するときに continue ステートメントに遭遇した場合でも、ループ反復ステートメントは引き続き実行されることに注意してください。
for ループは while および do while ループとは異なります。while および do while ループのループ反復ステートメントはループ本体に続くため、ループ本体が完全に実行できない場合、または continue ステートメントを使用してループを終了する場合、ループ反復ステートメントは実行されません。ただし、for ループのループ反復ステートメントはループ本体にまとめられていないため、ループの終了に continue ステートメントが使用されるかどうかに関係なく、ループ反復ステートメントは実行されます。
前のループと同様に、ループ本体にステートメントが 1 行しかない場合は、ループ本体の中括弧を省略できます。
たとえば、5 の階乗を計算する場合、for ループを使用する実装コードは次のようになります。
public static void main(String[] args) {
int result = 1;
for (int number = 1; number <= 5; number++) {
result *= number;
}
System.out.print("5 の階乗の結果は: " + result); // 出力"5の階乗の結果は: 120"
}
上記のステートメントの意味は、1 から開始して、数値変数の値が 5 より大きくなるまで毎回 1 ずつ増加してループを終了すると理解できます。ループ中に、number の値が result の現在の値で乗算されます。
for ステートメントの初期化、ループ条件、反復部分はすべて空のステートメントにすることができます (ただし、セミコロンは省略できません)。3 つすべてが空の場合、無限ループと同等になります。これらの状況を以下に順番に紹介します。
1.条件式1が空です
for 文中の条件式 1 の効果はプログラム内の他の場所に与えることができるため、条件式 1 が空の場合、for 文以降の括弧内の他の条件式の実行順序は変わりません。
たとえば、1 から 100 までのすべての奇数の合計を計算するには、この形式の for ステートメントを使用します。
public static void main(String[] args) {
int result = 0;
int number = 1; // for文の1番目の式と同じ意味
for (; number < 101; number++) {
if (number % 2 != 0) // 2で割り切れない場合、奇数であると判断し、加算する
result += number;
}
System.out.print("100以下の奇数の合計:" + result);
}
実行後の出力は次のようになります。
100以下の奇数の合計:2500
2.条件式2が空です
for文の条件式2が空の場合、ループの終了条件はありません。このとき、for文は条件式2の値が常に真であるとみなし、無制限にループが実行されます。したがって、ある条件に達したときにループを抜け出すには、文ブロック内で論理判断をしてbreak文を使ってループから抜け出す必要があります。 そうしないと無限ループが発生します。
1 から 100 までのすべての奇数の合計を計算することも同様です。この方法を使用したコードは次のとおりです。
public static void main(String[] args) {
int result = 0;
for (int number = 1;; number++) {
if (number > 100)
break; // equivalent to expression2 of the for statement, exiting the for loop when satisfied
if (number % 2 != 0) // If the number cannot be divided by 2, it is odd, so add it up
result += number;
}
System.out.print(result);
}
3.条件式3が空です
for言語の条件式3が空の場合、制御変数を設定する式がない、つまり各ループ後に変数の値を変更することができず、現時点ではループの正常終了は保証できません。 。
1 から 100 までのすべての奇数の合計を計算することも同様です。この方法を使用したコードは次のとおりです。
public static void main(String[] args) {
int result = 0;
for (int number = 1; number < 101;) {
if (number % 2 != 0) // もし2で割れない時、つまり奇数の場合、加算する
result += number;
number++; // for文の条件式3に相当し、1ずつ増やす
}
System.out.print("100以下の奇数の合計は:" + result);
}
ループ本体ステートメントがない場合、number 変数の値は 1 となり、常に 101 より小さいため、ループを終了できず、無限ループが形成されます。上記のコードでは、for ループの本体にnumber の increment ステートメントを入れます。その効果は完全な for ステートメントと同じです。
4. 3 つの条件式がすべて空です
for ループ ステートメントでは、条件式のどの部分が欠落していても、プログラム内の他の場所で補うことができるため、for ループ ステートメントの整合性が維持され、ループが正常に実行されます。
for文内のループ本体がすべて空、つまりループ初期値がない場合、ループ条件の判定は行われず、ループ変数の値は増加しませんが、このときループ本体は無条件で実行されます。無限ループまたは無限ループを形成します。この場合、読者はそれを使用するときは避けるようにしてください。
たとえば、1 から 100 までのすべての奇数の合計を計算する場合、このメソッドを使用するコードは次のようになります。
public static void main(String[] args) {
int result = 0; // 結果を示す変数
int number = 1; // forループの式1に相当する
for (;;) {
if (number > 100)
break; // forループの式2に相当する
if (number % 2 != 0) // 2で割り切れない場合、奇数を表すので、結果に加算する
result += number;
number++; // forループの式3に相当する
}
System.out.print("100以下のすべての奇数の合計は:" + result);
}
例1
スーパーマーケットの上半期の総売上高をカウントするJavaプログラムを作成します。ユーザーは月ごとの売上高を入力する必要があります。 forループを使用した実装コードは以下のとおりです。
public static void main(String[] args) {
int sum = 0;
int num = 0;
Scanner sc = new Scanner(System.in);
for (int i = 1; i <= 6; i++) {
System.out.println("第" + i + "ヶ月の販売数量を入力してください:");
num = sc.nextInt();
sum += num;
}
System.out.println("上半期の販売量は:" + sum);
}
このプログラムではループ回数を制御するループ変数 i を宣言し、1 に初期化しています。ループが実行されるたびに、i の値が 6 以下であるかどうかを判断する必要があります。条件が true の場合はスコアを蓄積し続け、そうでない場合はループを終了します。
ループ本体が実行されるたびに、i に 1 が加算されます。 i の値が 6 より大きくなるまでこのサイクルを繰り返し、サイクルを停止します。この時点で for ループ本体を終了し、一番下のステートメントを実行して累計売上高を出力します。
for、do-while、while の違い
「 Java while および do while ループ」では do-while ループと while ループについて学び、このセクションでは for ループについて学びました。 do-while と while の具体的な類似点と相違点については、先ほどのチュートリアルで紹介されているので、ここではあまり説明しません。以下では、表 2 に示すように、主に相違点を紹介します。
名前 | コンセプト | 該当シーン | 特徴 |
---|---|---|---|
for | ループ回数制限に基づいて何回繰り返すか | ループ数がわかっている操作に適しています |
|
while | 特定の条件が満たされたときに何かを行う | ループ回数が不明な操作に適しています |
|
do-while | 条件が満たされているかどうかを判断する前に、最初に 1 回実行します | 少なくとも 1 回実行されるループ操作に適しています |
|
例 2
for、do-while、while を使用して、それぞれ 1 ~ 10 の合計を求めます。
1) for ループを使用する
コードは以下のように表示されます:
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i < 11; i++) {
sum = sum + i;
}
System.out.println(sum);
}
実行結果は55です。
2) do-while ループを使用する
コードは以下のように表示されます:
public static void main(String[] args) {
int sum = 0;
int i = 1;
do {
sum = sum + i;
i++;
} while (i < 11);
System.out.println(sum);
}
実行結果は55です。
3) while ループを使用する
コードは以下のように表示されます:
public static void main(String[] args) {
int sum = 0;
int i = 1;
while (i < 11) {
sum = sum + i;
i++;
}
System.out.println(sum);
}
実行結果は55です。
上記のコードから、ループの数がわかっているため、for ステートメントが明らかにより簡潔であることがわかります。