嵌套IF条件语句的规则,不使用花括号

时间:2015-03-10 05:16:35

标签: java c++

这可能是一个非常初学的问题,因为我已经有大约2年的编程经验,但是对于嵌套的IF条件语句以及它们如何在没有大括号的情况下工作的方式总是让我困扰。

我总是使用大括号来保持编码的有序性。例如像这样。

    public static void main(String[] args) 
{
    int x = 9;
    int y = 8;
    int z = 7; 
    if (x > 9)
    {
        if (y > 8)
        {
            System.out.println("x > 9 and y > 8");
        }
    }
    else if (z >= 7)
    {
        System.out.println("x <= 9 and z >= 7");
    }
    else 
    {
        System.out.println("x <= 9 and z < 7");
    }
}

我一直都在使用这种模式,因为它一直对我有用。

但是,为什么以这种格式编写的内容不会以相同的方式工作?

    public static void main(String[] args) 
{
    int x = 9;
    int y = 8;
    int z = 7; 
    if (x > 9)
        if (y > 8)
            System.out.println("x > 9 and y > 8");
    else if (z >= 7)
        System.out.println("x <= 9 and z >= 7");
    else 
        System.out.println("x <= 9 and z < 7");
}

第一个代码将打印出x&lt; = 9且z&gt; = 7,但第二个代码将不打印任何内容。 (我假设else if和else语句在初始if语句中。)

换句话说,当没有像上面的例子那样发生花括号时,编译器如何测试条件语句的规则是什么?我尝试在网上寻找信息,但我似乎无法找到信息和/或我不知道如何专门调用这个问题来研究我的疑虑。

4 个答案:

答案 0 :(得分:0)

编译器不关心缩进。 else子句始终与尚未拥有if last else相关联。这样:

if (x > 9)
    if (y > 8)
        System.out.println("x > 9 and y > 8");
else if (z >= 7)
    System.out.println("x <= 9 and z >= 7");
else 
    System.out.println("x <= 9 and z < 7");

与此相同:

if (x > 9)
{
    if (y > 8)
    {
        System.out.println("x > 9 and y > 8");
    }
    else
    {
        if (z >= 7)
        {
            System.out.println("x <= 9 and z >= 7");
        }
        else
        {
            System.out.println("x <= 9 and z < 7");
        }
    }
}

另请注意,else if(...) ...实际上只是else {if(...) {...}} - 它是elseif的组合,而非特殊功能。

答案 1 :(得分:0)

如果我把括号放在第二个,那么编译器会是这样的。由于else ifelse立即找到if

if (x > 9) {
        if (y > 8){
            System.out.println("x > 9 and y > 8");
        }else if (z >= 7) {
            System.out.println("x <= 9 and z >= 7");
        }else {
            System.out.println("x <= 9 and z < 7");
        }
}

如果你需要复制,你应该至少放一个大括号,如:

if (x > 9) {
        if (y > 8)
            System.out.println("x > 9 and y > 8");
        else if (z >= 7)
            System.out.println("x <= 9 and z >= 7");
}else 
    System.out.println("x <= 9 and z < 7");

现在,如果声明肯定的话,最后的其他是先关闭。

答案 2 :(得分:0)

这不是花括号的问题,而是你如何格式化你的代码。空格在Java(或C ++。)中无关紧要。

所以,虽然你写了这个:

if (x > 9)
    if (y > 8)
        System.out.println("x > 9 and y > 8");
else if (z >= 7)
    System.out.println("x <= 9 and z >= 7");
else 
    System.out.println("x <= 9 and z < 7");

这并不意味着它等同于您的原始代码。为了说明原因,这里的代码将更合理地格式化:

if (x > 9)
    if (y > 8)
        System.out.println("x > 9 and y > 8");
    else if (z >= 7)
        System.out.println("x <= 9 and z >= 7");
    else 
        System.out.println("x <= 9 and z < 7");

我希望这能说明这里发生了什么。

答案 3 :(得分:0)

基本上,大括号是为了使编译器保持正常运行。如果你只有1 if和1 else,例如:

 if (x < 3)
    // some code here
 else
    // something else here

当你在现实生活中做数学问题时,操作顺序会告诉你先做括号中的数字,不是吗?大括号是一个分组符号,用于表示编译器要采取的操作顺序。