【问题标题】:Does ELSE followed by a nested IF work without braces ?(JAVA) [duplicate]ELSE 后跟嵌套的 IF 是否可以在没有大括号的情况下工作?(JAVA)[重复]
【发布时间】:2018-07-22 10:55:13
【问题描述】:
public class Main
{
    public static void main(String[] args) {
        int i=0;
        int j=10;
        if(i>0) 
        if(j>0)
        System.out.println("Hello World");

        else
        System.out.println("else");

    }
}

预期的答案是"else"

因为i=0ELSE 应该被执行。

但是输出是"Hello World"

当我将花括号添加到外部 if 时,代码可以正常工作。

【问题讨论】:

  • 无论这段代码的行为是或应该是什么,不使用大括号都是自找麻烦。总是使用大括号。并缩进你的代码。好的代码是人类可读的代码,而不仅仅是编译器。
  • 始终使用花括号,这是一个简单的规则,可以防止不必要的头痛

标签: java if-statement curly-braces


【解决方案1】:

您的代码不会打印任何内容。

根据文档:

Java 编程语言,如 C 和 C++ 以及之前的许多编程语言,任意规定 else 子句属于它可能属于的最里面的 if。

当使用没有大括号的嵌套 if else 时,else 块链接到最近的 if。 所以你的代码是这样的:

if(i>0) {
    if(j>0){
        System.out.println("Hello World");
    }
    else{
        System.out.println("else");
    }
}

【讨论】:

    【解决方案2】:

    如果没有花括号,else 属于第二个(内部)if 语句,因此如果第一个(外部)if 语句的计算结果为false,则不会到达。

    相当于:

    if(i>0) {
        if(j>0) {
            System.out.println("Hello World");
        } else {
            System.out.println("else");
        }
    }
    

    【讨论】:

      【解决方案3】:

      这段代码 sn-p 将为您提供您正在寻找的输出:

      int i = 0;
      int j = 10;
      
      if(i>0) {
          if(j > 0)
              System.out.println("Hello World");
      }
      else
          System.out.println("Else");
      

      您原始代码中的问题是您有以下语句:

      if(i>0)
      if(j>0)
      System.out.println("Hello World");
      

      在这种情况下,系统正在评估第一个为 True 的 if 语句,但由于它没有大括号,因此它不会被视为嵌套 if 语句,因为在其范围内有多个语句(另一个 if语句和 System.out.println 语句),您希望封装在其范围内。所以它永远不会评估为 True。但是,else 语句链接到 if(j

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-14
        • 2015-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多