1. ループの比較: forvswhile

ループwhileは、ステートメントまたはステートメントのグループを複数回実行する必要がある場所ならどこでも使用できます。しかし、考えられるすべてのシナリオの中で、強調する価値のあるシナリオが 1 つあります。

これは、プログラマー (プログラムの作成者) がループを何回実行する必要があるかを事前に知っている状況について話しています。1これは通常、特別なカウンター変数を宣言し、ループの各反復で変数を増加 (または減少) することによって処理されます。

すべてが正常に動作しているように見えますが、あまり便利ではありません。ループの前に、カウンター変数の初期値を設定します。次に、条件で、すでに最終値に達しているかどうかを確認します。ただし、通常はループ本体の最後で値を変更します。

ループ本体が大きい場合はどうなるでしょうか? それとも、複数のネストされたループがある場合でしょうか? 一般に、このような場合は、カウンタ変数に関するすべての情報を 1 か所に収集することが望ましいです。それが、Java にループがある理由ですfor。これもそれほど複雑ではないようです。

for (statement 1; condition; statement 2)
{
   block of statements
}

ループwhileには括弧内の条件のみが含まれますが、forループにはセミコロンで区切られた 2 つのステートメントが追加されます。

実際は思っているよりも単純です。コンパイラは次のようにforループを通常のループに変換します。while

statement 1;
while (condition)
{
   block of statements
   statement 2;
}

さらに良いことに、これを例で示してみましょう。以下の 2 つのコード スニペットは同一です。

オプション1 オプション 2
for (int i = 0; i < 20; i++)
{
   System.out.println(i);
}
int i = 0;
while (i < 20)
{
   System.out.println(i);
   i++;
}

カウンタ変数に関連するすべてのコードを 1 か所に集めただけですi

ループではforステートメント 1はループ自体が開始される前に 1 回だけ実行されます。これは 2 番目のコード スニペットではっきりとわかります。

ステートメント 2はループ本体と同じ回数実行され、毎回ループ本体全体が実行された後に実行されます。


2.forループが使用される場所

このforループは、おそらく Java で最もよく使用されるタイプのループです。これはどこでも使用されており、プログラマにとってはループよりもわかりやすく便利ですwhile。事実上、あらゆるwhileループをループに変換できますfor

例:

while ループ forループ
int i = 3;
while (i >= 0)
{
   System.out.println(i);
   i--;
}
for (int i = 3; i >= 0; i--)
{
   System.out.println(i);
}
int i = 0;
while (i < 3)
{
   System.out.println(i);
   i++;
}
for (int i = 0; i < 3; i++)
{
   System.out.println(i);
}
boolean isExit = false;
while (!isExit)
{
   String s = console.nextLine();
   isExit = s.equals("exit");
}
for (boolean isExit = false; !isExit; )
{
   String s = console.nextLine();
   isExit = s.equals("exit");
}
while (true)
   System.out.println("C");
for (; true; )
   System.out.println("C");
while (true)
{
   String s = console.nextLine();
   if (s.equals("exit"))
      break;
}
for (; true; )
{
   String s = console.nextLine();
   if (s.equals("exit"))
      break;
}

最後の例に注目してください。ループカウンターを操作するためのステートメントがありません。カウンターも声明もありません。

Javaではループ内でfor「カウンタを初期化する文」と「カウンタを更新する文」を省略できます。ループ条件を定義する式も省略できます。



for3.ループ使用のニュアンス

forループとbreakandステートメントの使用に関する重要な点continue

breakループ内のステートメントはループfor内と同じように機能しwhile、ループを直ちに終了します。ステートメントcontinueはループ本体をスキップしますが、スキップしませんstatement 2(ループ カウンタは変更されます)。

forwhileループの関係をもう一度見てみましょう。

for (statement 1; condition; statement 2)
{
   block of statements
}
statement 1;
while (condition)
{
   block of statements
   statement 2;
}

continueforステートメントがループ内で実行される場合、ステートメントのブロックの残りの部分はスキップされますが、ステートメント 2 (ループのカウンタ変数で動作するステートメントfor) は引き続き実行されます。

7 で割り切れる数値をスキップする例に戻りましょう。

このコードは永久にループします このコードは正常に動作します
int i = 1;
while (i <= 20)
{
   if ( (i % 7) == 0) continue;
   System.out.println(i);
   i++;
}
for (int i = 1; i <= 20; i++)
{
   if ( (i % 7) == 0) continue;
   System.out.println(i);
}

ループを使用するコードはwhile機能しません。i が 7 より大きくなることはありません。しかし、forループを含むコードは正常に機能します。



4. for ループの比較: Java と Pascal

ちなみに、PascalにもForループがあります。一般に、基本的にすべてのプログラミング言語には 1 つがあります。しかし、Pascal ではそれが非常に明確です。例:

パスカル ジャワ
For i := 1 to 10 do
Begin
   Writeln(i);
End;
for (int i = 1; i <= 10; i++)
{
   System.out.println(i);
}
For i := 1 to 10 do step 2
Begin
   Writeln(i);
End;
for (int i = 1; i <= 10; i = i + 2)
{
   System.out.println(i);
}
For i := 10 downto 0 do step 2
Begin
   Writeln(i);
End;
for (int i = 10; i >= 0; i = i - 2)
{
   System.out.println(i);
}