1.比較循環:forvswhile

循環while可以用在任何一個語句或一組語句需要執行多次的地方。但在所有可能的情況中,有一個值得強調。

我們談論的是程序員(程序的創建者)事先知道循環應該執行多少次的情況。這通常通過聲明一個特殊的計數器變量,然後在1循環的每次迭代中增加(或減少)該變量來處理。

一切似乎都按預期工作,但不是很方便。在循環之前,我們設置計數器變量的初始值。然後在條件中我們檢查它是否已經達到最終值。但是我們通常在循環體的最後更改值。

如果循環體很大怎麼辦?或者如果我們有幾個嵌套循環?通常,在這些情況下,希望將所有這些關於計數器變量的信息收集在一個地方。這就是我們for在 Java 中使用循環的原因。它看起來也不是很複雜:

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

一個while循環只有括號中的一個條件,但是一個for循環添加了兩個用分號分隔的語句。

實際情況比聽起來簡單:編譯器將for循環轉換為普通while循環,如下所示:

statement 1;
while (condition)
{
   block of statements
   statement 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++;
}

我們只是將與計數器變量相關的所有代碼聚集到一個地方i

for循環中,語句 1在循環本身開始之前只執行一次。這可以在第二個代碼片段中清楚地看到

語句 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;
}

注意最後一個例子。缺少使用循環計數器的語句。沒有櫃檯,也沒有聲明。

for循環中,Java 允許您省略“初始化計數器的語句”和“更新計數器的語句”。甚至可以省略定義循環條件的表達式。



3. 使用for循環的細微差別

for關於使用循環和break語句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循環。通常,基本上每種編程語言都有一個。但是在 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);
}