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);
}