“for循环”范围的差异

时间:2013-06-24 20:43:56

标签: java

我是一个java初学者,我正在研究循环。在处理“for循环”时,我遇到过这种情况,当代码执行时带有和不带括号时我会得到不同的结果。

你能解释一下获得不同产出背后的原因吗?

5 个答案:

答案 0 :(得分:3)

如果没有大括号,您只需在for之后加入语句。使用大括号,您可以包含其中包含的所有内容(该范围内的所有内容)。

示例:

for (int i = 0; i < 10; i++)
    System.out.println("Ten");// Will print "Ten", 10 times.
    System.out.println("Once");// Will print "Once", 1 time.

如果你包括大括号,它会打印两次。

答案 1 :(得分:3)

你的问题是关于语言的语法。

From the JLSfor语句的基本语法是:

for ( ForInit ; Expression ; ForUpdate ) Statement

示例:

for (int i = 0; i < array.length; i++) System.out.println(array[i]);

在上面的示例中,Statement当然是System.out.println(array[i]);

阻止陈述({ }

问题是,在Java中,语句也可以是block A block以大括号({...})开始/结束可以包含一系列其他陈述:

// this is a statement
int i = 0;
// this is also a statement, a block statement with two other statements inside
{ int j = 0; int x = 1; }

// now, as a block *is* a statement, and it contains a sequence of statements,
// the construction below is also valid
{ int k = 9; { int j = 0; int x = 1; } { int a = 0; } }

// also notice that, if not inside a String, white spaces don't matter, so
// the statement above is the same as
{
    int k = 9;
    { int j = 0;           int x = 1;               }
    {
        int a = 0;
    }
}

所以如果你有:

for (int i = 0; i < array.length; i++) Statement1; Statement2;

只有Statement1for

的一部分

当然,由于Statement1可以是一个区块,例如{ stmt1_1; stmt1_2; },会让for看起来像什么:

for (int i = 0; i < array.length; i++) { stmt1_1; stmt1_2; } Statement2;

由于白色空格无关紧要,您可以用更好的可读方式编写它:

for (int i = 0; i < array.length; i++) {
   stmt1_1;
   stmt1_2;
}
Statement2;

答案 2 :(得分:1)

  • 没有大括号:只有下一个语句在循环中。
  • 使用大括号:大括号内的所有内容都是 循环。

Java代码中的空格仅用于轻松读取代码。编译器完全忽略缩进。

请参阅此代码:

for (int i = 0; i < 3; i++)
    System.out.println("Hello"); System.out.println("World");

将打印

Hello
Hello
Hello
World

会产生相同的输出
for (int i = 0; i < 3; i++) System.out.println("Hello");
    System.out.println("World");

答案 3 :(得分:0)

您的问题是循环中有多个语句。使用大括号,这些语句在循环的每次迭代中都会执行一次。没有大括号,第一个语句会在每次迭代时执行,其余语句在循环完成后执行。

没有大括号:

for (int i = 0; i < 10; i++)
System.out.println("Inside for loop");
System.out.println("Outside for loop");

使用bracesL

for (int i = 0; i < 10; i++){
System.out.println("Inside for loop");
System.out.println("Also inside for loop");
}

答案 4 :(得分:0)

以下示例演示了您的问题:

这会将第一行循环100次,但只需将其他两行作为常规打印运行。

for(int i = 0; i < 100; i++)
    System.out.println("Test Print 1");
    System.out.println("Test Print 2");
    System.out.println("Test Print 3");

这将打印所有行100次。

for(int i = 0; i < 100; i++){
    System.out.println("Test Print 1");
    System.out.println("Test Print 2");
    System.out.println("Test Print 3");
}