Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带有不可检查的else的IF语句_Java_If Statement - Fatal编程技术网

Java 带有不可检查的else的IF语句

Java 带有不可检查的else的IF语句,java,if-statement,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"); }

你能解释一下为什么下面显示的方法是由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");
}
publicstaticvoidtestif(intv){
如果(v<10)
如果(v>20)
系统输出打印项次(“20如果”);
其他的
系统输出打印项次(“20其他”);
其他的
系统输出打印项次(“其他10项”);
}
  • 通常每个IF都应该与最近的ELSE链接,为什么最后一个ELSE不是悬挂的ELSE?而且与假设有联系

  • 最后一个是无法访问的,为什么允许
提前感谢您的帮助


诚恳地说,

是这样工作的,如果v小于10,那么你应该得到打印值10

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");
   }
}
publicstaticvoidtestif(intv){
如果(v<10){
如果(v>20){
系统输出打印项次(“20如果”);
}否则{
系统输出打印项次(“20其他”);
}
}否则{
系统输出打印项次(“其他10项”);
}
}
编辑:如果没有任何大括号,它看起来像这样;不知道如何格式化,所以请容忍我

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");
}
publicstaticvoidtestif(intv){
如果(v<10)
如果(v>20)系统输出打印项次(“20如果”);
else System.out.println(“20 else”);
else System.out.println(“10 else”);
}

如果没有大括号,
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");
}
if(v<10){
如果(v>20){
系统输出打印项次(“20如果”);
}否则{
系统输出打印项次(“20其他”);
}
否则{
系统输出打印项次(“其他10项”);
}
通常每个IF都应该与最近的ELSE链接,为什么最后一个ELSE不是悬空的ELSE?而且与what 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(v<10)
如果(v>20)
系统输出打印项次(“20如果”);
其他的
系统输出打印项次(“20其他”);
其他的
系统输出打印项次(“其他10项”);
这是完全正确的。因为当您没有
{}
时,只有一行代码绑定到作用域if
if
。但是在您的情况下,if后面的下一行是另一行if
if
,因此作用域仍然有效

然而,逻辑看起来并不好,但是代码仍然可以很好地执行

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


最后一个是无法访问的,为什么允许


如果您的
v
=10

第二个
else
属于第一个
if
,第二个
if
和第一个
else
属于第一个
if
中间的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");
if(v<10){
如果(v>20)
系统输出打印项次(“20如果”);
其他的
系统输出打印项次(“20其他”);
}
其他的
系统输出打印项次(“其他10项”);

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

    if (v < 10) if (v > 20) System.out.println(" 20 IF"); else System.out.println(" 20 ELSE"); else System.out.println("10 Else");
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) {
        //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");
    }
}

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

 if(v<10)
   {
     if(v>20)
        System.out.println("20 IF");
   }
 // now the following else statement will be of ""if(v<10)"" and not 
 //                                                     ""if(v>20)""
 else
   {
      System.out.println("20 ELSE");  // its not of (20 ELSE)
   }
if(v20)
系统输出打印项次(“20如果”);
}
//现在,下面的else语句将是关于“if(v20)”的
其他的
{
System.out.println(“20-ELSE”);//它不属于(20-ELSE)
}
任何后面没有前面if语句的else语句都将给出错误。

else匹配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");
}
publicstaticvoidtestif(intv){
如果(v<10)
如果(v>20)
系统输出打印项次(“20如果”);
其他的
系统输出打印项次(“20其他”);
其他的
系统输出打印项次(“其他10项”);
}
你的假设“通常每个IF都应该与最接近的其他IF链接”并不完全正确。如果不使用花括号,If和else的主体是紧跟其后的第一条语句。这种情况发生在第二个最里面的if(见下面的规则)上,然后发生在第一个if上

本文将讨论Java如何选择要使用的其他工具。特别是悬空else(其中有两个if和一个else)的情况,其解决方法如下:

java编程语言,如C和C++以及许多编程 在它们之前的语言,任意地命令else子句属于 如果它可能属于最里面的话

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

可达性 在您的示例中,不可能达到“20if”语句,因为它要求V既小于10又大于20。虽然Java确实有一些无法访问的代码,但这并不是针对所有可能无法访问的条件的优化。显示完成了哪些检查

有很多规则,但对于控制语句,它们只查看表达式是否为有效常量(始终为true或false)。对于if语句,甚至未执行此检查,因此它们可用于禁用一段代码:

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


请考虑前两个if语句之间的空格。
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");
}