没有花括号的 If-Else 控制流

If-Else Control Flow without 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!");

正确缩进才能看到

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被执行。

或者在引用中反映出来,没有 "inner" if 因为没有 if 包含任何其他 if.

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

您的控制结构缺少括号。这些对于包含您的逻辑范围很重要,否则除非您小心,否则您最终会得到不正确的逻辑。

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 is not qual to 10!',因为您的逻辑正在评估 'else' 子句。逻辑,if(x!=10) 打印等于 x,但如果它等于 10,则打印不等于 10。

请在您的代码中加入左花括号和右花括号:

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?