IF语句与其他不可用的语句

时间:2017-10-12 07:16:13

标签: java if-statement

您能解释一下为什么下面显示的方法是由Java编译和运行的

public static void testIf(int v){
   if (v < 10)   

   if (v >20 )  
     System.out.println(" 20 IF");
   else        
     System.out.println(" 20 ELSE");

   else        
     System.out.println("10 Else");
}
  • 通常每个IF应该与最接近的ELSE相关联,为什么最后的其他不是悬挂的ELSE?此外,IF与之相关。
  • 无法访问最后一个ELSE,为什么允许它?

提前感谢您的帮助。

此致

9 个答案:

答案 0 :(得分:8)

就是这样,如果v小于10,你应该得到印刷品10 else

public static void testIf(int v){
   if (v < 10) {  
       if (v >20 ) {  
           System.out.println(" 20 IF");
       } else {      
           System.out.println(" 20 ELSE");
       }
   } else {       
       System.out.println("10 Else");
   }
}

编辑:没有任何支撑,它看起来像这样;不知道如何格式化这个让我忍受......

public static void testIf(int v){
   if (v < 10)
       if (v >20 ) System.out.println(" 20 IF");
       else System.out.println(" 20 ELSE");
   else System.out.println("10 Else");
}

答案 1 :(得分:3)

  

通常每个IF都应该与最接近的ELSE链接,为什么最后的其他不是悬挂的ELSE?此外,IF与之相关。

如果你很好地格式化代码,那就更有意义了。

if (v < 10)

            if (v > 20)
                System.out.println(" 20 IF");
            else
                System.out.println(" 20 ELSE");

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

完全没问题。因为当您没有{}时,只有一行代码绑定到范围if。但是在你的情况下,if之后的下一行是if,因此范围仍然存在。

然而,逻辑看起来并不好看。但代码仍然可以正常执行。

正如其他人所指出的那样,为了让世界幸福,我总是喜欢使用{}

  

无法访问最后一个ELSE,为什么允许它?

如果您的v>= 10

,则可以访问

答案 2 :(得分:1)

如果没有花括号,if可以采用单个语句 - 在本例中为if-else。因此,第一个else匹配内部if,第二个else匹配外部if。添加花括号并正确缩进代码使其更容易理解:

if (v < 10) {
    if (v >20) {
        System.out.println(" 20 IF");
    } else {
        System.out.println(" 20 ELSE");
    }
else {
    System.out.println("10 Else");
}

答案 3 :(得分:1)

第二个else属于第一个if,第二个if和第一个else属于第一个if

答案 4 :(得分:1)

你的中间if-else块

if (v >20 )  
    System.out.println(" 20 IF");
else        
    System.out.println(" 20 ELSE");

被java视为外部if的内部块。我的意思是你的代码编译为:

if (v < 10){ 
    if (v >20 )  
        System.out.println(" 20 IF");
    else        
        System.out.println(" 20 ELSE");
}
else        
    System.out.println("10 Else");

答案 5 :(得分:1)

一个好的做法是使用花括号。 {}

所以你的代码看起来像这样。

public static void testIf(int v) {

    if (v < 10) {
        //This will actually never be true, since v cannot be both less than 
        //10 and at the same time greater than 20.   
        if (v >20 ) {  
            System.out.println(" 20 IF");
        }
        else {        
            System.out.println(" 20 ELSE");
        }
    }

    else {       
        System.out.println("10 Else");
    }
}

这意味着以下来电将打印出来:

> testIf(9); -> //20 ELSE 
> testIf(12); -> //10 ELSE 
> testIf(23); -> //10 ELSE

答案 6 :(得分:1)

最后一个else语句将无法访问,因为if和else语句是两个不同的语句。因此,如果你不给花括号,代码将被视为 -

photo = open(dir, "rb").read()

任何后面没有if语句的else语句都会出错。

答案 7 :(得分:1)

否则匹配If

如果您使用格式化程序,它将显示if和else匹配的内容:

public static void testIf(int v) {
    if (v < 10)

        if (v > 20)
            System.out.println(" 20 IF");
        else
            System.out.println(" 20 ELSE");

    else
        System.out.println("10 Else");
}

您的假设“通常每个IF应该与最接近的ELSE相关联”并不完全正确。如果不使用花括号,则if和else的主体是紧随其后的第一个语句。这种情况发生在第二个,最里面的if(参见下面的规则),然后是第一个if。

Java Language Specification中讨论了Java如何选择使用的其他内容。特别是悬挂其他的情况(其中有两个if和一个其他),其解析如下:

  

Java编程语言,如C和C ++以及许多编程   在他们之前的语言,任意地命令else子句属于   到最内层,如果它可能属于它。

当然,您的示例就是为什么您应该在每个if语句中添加大括号(和缩进),因为这样会更加清晰。

可达性

在你的例子中,不可能达到“20 IF”语句,因为它要求V小于10且大于20.虽然Java确实有一些无法访问的代码,但这不是所有的优化可能无法达到的条件。 Java Language Specification显示已完成哪些检查。

有很多规则,但对于控制语句,它们只查看表达式是否是有效常量(总是为真或假)。对于if语句,甚至不进行此检查,因此可以使用它们来禁用一些代码:

  

这种方法与其他对照的治疗方法一致   结构。但是,为了允许使用if语句   方便地用于“条件编译”目的,实际规则   不同。

答案 8 :(得分:0)

如果您不打算使用正确的缩进和括号,那么如何:

    if (v < 10) if (v > 20) System.out.println(" 20 IF"); else System.out.println(" 20 ELSE"); else System.out.println("10 Else");