【问题标题】:If-Else Control Flow without curly braces没有花括号的 If-Else 控制流
【发布时间】:2023-10-20 11:10:01
【问题描述】:

我正在尝试使用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
  • if(1==2) 运行的代码只是System.out.println(x);。使用花括号
  • 我建议使用花括号和 IDE。他们将帮助您调试此类问题。
  • 如果x = 10,那么x!=10为假,所以else块被执行,它会打印X is not equal to 10!。打印出来的文字不正确是因为你是这样写的。
  • 所以投票只是因为你的困惑或不喜欢这个问题。这是一个合理的问题,我们并不是都那么忙,我们无法处理重复的问题。如果是这样的话,在 5 分钟内不会有 3 个答案和 5 个 cmets……只是说。

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


【解决方案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!");

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

第一个if 不正确,第一个println 没有被执行(除了描述的第二个版本)。
第二个if 被无条件评估,不正确,else 被执行。

或者不反映在引用中,没有“内部”if,因为没有包含任何其他ifif

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

【讨论】:

    【解决方案2】:

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

    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) 打印等于 x,但如果等于 10 则打印不等于 10。

    【讨论】:

      【解决方案3】:

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

      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?

      【讨论】: