不带花括号的If-Else控制流

时间:2018-07-10 17:19:55

标签: java if-statement control-flow curly-braces

我正在尝试使用x =10运行以下代码。"X is not equal to 10!"正在打印。但是根据文档,else属于最里面的if()?。此外,如果我们将if块中的"1==2"替换为1==1,那么也会打印"X is not equal to 10!"。 我已更正代码..
编辑:得到答案。

   if(1==2)
        if(x!=10)
            System.out.println("X is equal to "+x);
       else
        System.out.println("X is not equal to 10!");

3 个答案:

答案 0 :(得分:2)

正确缩进以查看

if(1==2)
    System.out.println(x);
if(x!=10)
    System.out.println("X is equal to "+x);
else
    System.out.println("X is not equal to 10!");

我认为已经回答了。
但更详细:

第一个if不正确,第一个println不执行(除了所描述的第二个版本)。
第二个if是无条件求值的,如果不是,则执行else

或者将其反映在报价上,因为没有if包含任何其他if,所以没有“内部” if

或者另一方面,您似乎认为发生输出是因为第一个if条件为假,即else附加到第一个if。但是,它被附加到第二个if,因为受第一个if影响的条件代码在;处结束。要使更多代码受第一个if的影响,您可以引入一个由几行组成的块,并带有一对{}

答案 1 :(得分:0)

您的控制结构缺少括号。这些对于封闭逻辑范围很重要,否则除非您小心,否则最终会得到错误的逻辑。

public class flow {
 public static void main(String[] args) {
  int x = 10;
  if(1==2)
   System.out.println(x); <--- this is 'dead code' will not be reached
   if(x!=10)
    System.out.println("x is equal to " + x);
   else
    System.out.println("x is not equal to 10!");
 }
}

此外,您的答案是打印'x不等于10!在控制台中,因为您的逻辑正在评估“ else”子句。逻辑上,if(x!= 10)print等于x,但是如果等于10,则print不等于10。

答案 2 :(得分:-1)

请在您的代码上加上大括号:

if(1 == 2){
    System.out.println(x);

    if(x!=10){
        System.out.println("X is equal to " + x);
    } else {
        System.out.println("X is not equal to 10!");
    }           
}

有关更多信息:Is it bad practice to use an if-statement without brackets?