ELSE后跟嵌套IF是否可以不使用花括号而工作?(JAVA)

时间:2018-07-22 10:55:14

标签: java if-statement curly-braces

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=0,因此应执行ELSE

但输出为"Hello World"

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

3 个答案:

答案 0 :(得分:3)

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

根据文档:

  
    

Java编程语言(例如C和C ++)以及之前的许多编程语言,任意决定了else子句可能属于最内部的子句。

  

在使用嵌套的if而不带大括号的情况下,else块链接到最近的if。 因此,您的代码与此类似:

function L_MovieList({title, poster, genres, synopsis,language,runtime,year,rating,likes,trcode}) {

    console.log(likes);
    console.log("here"+trcode)

    let url = JSON.stringify({trcode});
    let url_path = "http://www.youtube.com/watch?v="+{url};

    return (
        <div className="L_MovieList">
          <a href={url_path}>예고편</a>   
        </div>
    )
}

答案 1 :(得分:0)

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

等效于:

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

答案 2 :(得分:0)

此代码段将为您提供所需的输出:

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 <0)语句,因此else语句在这种情况下也不会触发。因此,您最终将无法执行代码。为了解决这个问题,我将第二个if语句放在带有括号的第一个if语句范围内。在此示例中,else语句不必在花括号内。既然系统已经知道第二条if语句嵌套在第一条if语句的范围内,则else语句链接到第一条if语句,并且在我不大于0时将执行。