[英]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.