簡體   English   中英

無法到達的if語句

[英]Unreachable If Statement

在發布之前,我嘗試過搜索與此類似的答案,所以請放輕松。 我使用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 
  }
}

是否因為您在if語句之前返回了值? 該代碼將設置batteryLevel然后返回(0),因此永遠不會到達if語句。

“問題”是您要在if語句之前返回。

return (0);
if (whatever)
   doSomething;

“ return(0)”有兩件事:它立即結束當前函數的執行,並“返回”執行從中調用您的函數; 並且還會將“ 0”傳遞回函數調用。 因此,在到達if語句之前,您總是要結束函數的執行。

我認為您想設置“返回值”然后繼續執行。 這是相對常見的。 創建一個名為“ retVal”或其他名稱的新變量,並將其設置為零。 然后,當您的函數完成執行時:

return(retVal);

但是您似乎也不太聰明地使用返回值。 您似乎只返回“ 0”。 函數的真正“輸出”就是日志記錄。 看來您實際上並沒有返回有用的數據,因此請將函數設為“ void”:

public void chargeBattery(){

由於該函數不期望返回值,因此您根本不需要“返回”語句。 當您閱讀函數的結尾時,它將簡單地將代碼的執行返回到調用該函數的位置。 如果您想“盡早”結束執行,則只需使用:

return;

好吧,這是關於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
}

如前所述,如果要在if語句之前返回0,那么您是否需要返回任何內容? 因為你可以改變

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

那么您可以刪除退貨聲明。

System.out.println(“ Droid充電中...”); batteryLevel =電池電量+小時; //為droid return(0)設置充值; //返回0還是什么都不返回?

由於電池水平=電池水平+小時以下的return(0),if語句和所有代碼均無法訪問,請刪除return(0)以修復無法訪問的錯誤

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM