2017-10-06 111 views
0

我添加了一个continue语句来结束当前的迭代,以便循环体中的其余语句不被执行。继续在Java中的声明

public class Main { 
    public static void main(String[] args) { 
     int sum = 0; 
     int number = 0; 
     while (number < 20) { 
      number++; 
      if (number == 10 || number == 11) 
       continue; 
      sum += number; 
     } 
     System.out.println(sum); 
    } 
} 

我无法理解的事情是为什么我会得到错误,如果我加入{}

public class Main { 
    public static void main(String[] args) { 
     int sum = 0; 
     int number = 0; 
     while (number < 20) { 
      number++; 
      if (number == 10 || number == 11) { 
       continue; 
       sum += number; 
      } 
     } 
     System.out.println(sum); 
    } 
} 

错误

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    Unreachable code 

    at Main.main(Main.java:18) 
+0

很明显。你无法得到sum + = number; – duffymo

+0

@duffymo我想了解逻辑 –

+1

你如何达到这条线你写的方式?你知道如何继续工作吗?当你继续执行会发生什么? – duffymo

回答

2

这将工作。

if (number == 10 || number == 11) { 
    continue; 
} 
sum += number; 

说明

当你不加{}if声明,只剩下一行会予以考虑。因此,你需要离开sum += number{}

+0

感谢您的明确解释 –

1

因为continue语句是最后在你的分支之间({}),所以下面的语句(总和+ =号)不会永远执行。你的IDE必须警告你,这就是为什么它没有编译它,你有错误。

+0

感谢您的明确解释 –

1

在你的第一个块,不{一个你有效地写道:

if (number == 10 || number == 11) { 
     continue; 
} 
sum += number; 

sum += number可达,只要表达false

在第二个你实际写道:

if (number == 10 || number == 11) { 
     continue; 
     sum += number; 
} 

sum += number;已变得无法访问,因为如果表达式为true,它将总是被跳过,因为continue,并且如果表达式为false,它将不会被执行,因为它不在块语句中。

+0

感谢您的明确解释 –

1

正如其他答案所说,只有第一行代码将在if语句后运行。但是,另一个规则是,不能在if语句中的“continue”语句之后添加更多行代码。所以,这真的是错误。如果您要调整代码以切换“sum + = number”;继续下去,你将不会收到同样的错误。希望这可以帮助。