【问题标题】:Unreachable If Statement无法访问的 If 语句
【发布时间】:2017-04-29 00:41:50
【问题描述】:

我在发布之前尝试搜索类似的答案,所以请放轻松。我只使用 Java 大约一个半星期。在下面的代码块中,我收到一个错误,关于第 20 行的无法访问的 if 语句,以及关于第 30 行缺少 return 语句的错误。我相信我可以将其设置为 return(0);对于最后一个错误,但对于第一个问题,我似乎无法弄清楚。

class Droid {

  int batteryLevel = 100;               //created instance variable, batteryLevel
  int hours;                                //created instance var, hours. val not set yet

  public void activate() {              //created activate method, string type return

    System.out.println("Activated. Hello human. How can I help you?");
    batteryLevel = batteryLevel - 5;  //Set batteryLevel to decrease by 5
    System.out.println("Battery level is " + batteryLevel + " percent.");
 } 

 public int chargeBattery(){        //creat int method chargeBattery


  System.out.println("Droid charging...");
  batteryLevel = batteryLevel + hours;  //setting up recharge for droid
  return(0);                    //return 0 or return nothing?

   if (batteryLevel > 100) {   //If battery level is greater than 100
    batteryLevel = 100;                 //battery level is 100
    System.out.println("Your battery level is at " + batteryLevel + " percent");
    return(0);                  //return 0 or return nothing?
   }    

   else {                               //else, print out battery level
     System.out.println("Your battery level is at " + batteryLevel + " percent");
   }
 }





  public static void main(String [] args) {   // Main method 
  }
}

【问题讨论】:

  • 为了进一步澄清,如果声明 batteryLevel > 100,则会发生错误。谢谢。
  • 你返回(0);在chargeBattery() 中的 if 语句之前,所以你在点击 if 语句之前从函数返回

标签: java if-statement compiler-errors return


【解决方案1】:

“问题”是您在 if 语句之前返回。

return (0);
if (whatever)
   doSomething;

"return (0)" 做了两件事:它立即结束当前函数的执行并“返回”执行调用你的函数;它还将“0”传递回您的函数调用。因此,您总是在到达 if 语句之前结束函数的执行。

我认为您想设置“返回值”然后继续执行。这是比较常见的。创建一个名为“retVal”或其他名称的新变量并将其设置为零。然后当你的函数完成执行时:

return(retVal);

但是您似乎也没有非常聪明地使用您的返回值。您似乎只返回“0”。你的函数真正的“输出”是日志记录。看起来你实际上并没有返回有用的数据,所以让你的函数“无效”:

public void chargeBattery(){

由于函数不期望返回值,因此您根本不需要“返回”语句。当您阅读函数的结尾时,它只会将代码的执行返回到调用函数的位置。如果您想“提前”结束执行,那么只需使用:

return;

【讨论】:

    【解决方案2】:

    是不是因为你在 if 语句之前返回了一个值?代码将设置 batteryLevel 然后返回 (0),因此永远不会到达 if 语句。

    【讨论】:

      【解决方案3】:

      嗯,这是关于 Java 方法的基础知识。在您的代码中:

      public int chargeBattery(){        
          System.out.println("Droid charging...");
          batteryLevel = batteryLevel + hours;  
          return(0);           //method will exit from this line onwards
          //Everything from here onwards will be unreachable
      }
      

      无论您返回一个带有return 0 或只是return 的值,都会导致该方法自行退出(并从调用它的位置继续)。

      因此,您的 return 语句下面的所有内容都将永远不会到达,Java 100% 肯定它永远不会到达,因为 return 语句 总是会先运行

      但是,如果您的 return 语句包含在 if-condition 中,则情况不同,因为条件仍有可能失败,因此跳过 return 语句:

      例如:

      public void myMethod(){
          if(whatever)
              return;
          //Code below may still run if above condition fails
      }
      

      【讨论】:

        【解决方案4】:

        如前所述,您在 if 语句之前返回 0 你需要退货吗?因为你可以改变

        public int chargeBattery() ->  public void chargeBattery()
        

        然后您可以删除退货声明。

        【讨论】:

          【解决方案5】:

          System.out.println("机器人充电..."); 电池电量 = 电池电量 + 小时数; //为机器人设置充值 返回(0); //返回0还是什么都不返回?

          由于电池电量=电池电量+小时以下的return(0)导致if语句和所有代码无法访问,请删除return(0)以修复无法访问的错误

          【讨论】:

            猜你喜欢
            • 2021-05-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-02-01
            相关资源
            最近更新 更多