2012-10-21 70 views
-3

我已經爲我的問題搜索了很多主題,讀了很多......但他們並不完全如我。無法訪問的代碼Java編譯錯誤

我從Eclipse IDE中收到「Unreachable Code」編譯錯誤。

我不明白爲什麼我的代碼無法訪問!雖然很簡單! 這裏是...

public String doAction(int action, Player P1, Player P2) { 
    switch(action) { 
     case 'a': 
     case 'A': 
      CriticalChance = ThreadLocalRandom.current() .nextInt(CritMin,CritMax+1); 
      if(CriticalChance <= 5) { 
       int temp = ThreadLocalRandom.current().nextInt(31,50+1); 
       P1.setAttack(temp); 
      } else { 
       P2.deductHp(P1.newNormalAttack()); 
      } 

      if(CriticalChance <= 5) { 
       String temp = String.format("CRITICAL STRIKE! "+P1.getName()+" did "+P1.getAttack()+" damage to "+P2.getName()+"\n"); 
       return temp; 
      } else { 
       String temp = String.format(P1.getName()+" did "+P1.getAttack()+" damage to "+P2.getName()+"\n"); 
       return temp; 
      } 

      if(P2.getHp() > 0) { 
       String temp = String.format(P2.getName()+"'s Remaining HP is "+P2.getHp()+"\n"); 
       return temp; 
      } else { 
       String temp = String.format(P2.getName()+" Bled To Death!!\n"); 
       return temp; 
      } 
      break; 
    } 
} 

請幫忙!如果你需要更多信息,請告訴我。

+2

什麼代碼表示無法訪問? – CKing

+0

是的,對於這些類型的問題,總是最好顯示錯誤消息本身,並通過代碼中明顯的註釋來指示導致錯誤的行。否則你迫使我們猜測,而且往往我們不太擅長。 –

+0

請添加確切的錯誤信息。所以有人可以指出確切的錯誤。 – saji89

回答

3

它將永遠不會達到break聲明,因爲在它之前如果在每個分支中含有return聲明,所以它肯定會從其中一個分支中返回。

+0

謝謝,解決了! – MiDOZ

1

它永遠不會到達休息;聲明,因爲你正在返回前面的if和else。

1
if(CriticalChance <= 5) 
    { 
     String temp = String.format("CRITICAL STRIKE! "+P1.getName()+" did "+P1.getAttack()+" damage to "+P2.getName()+"\n"); 
     return temp; 
    }  
    else 
    { 
     String temp = String.format(P1.getName()+" did "+P1.getAttack()+" damage to "+P2.getName()+"\n"); 
     return temp; 
    } 

低於此塊,您的代碼無法訪問。不會執行。

1

這是因爲你的return temp聲明之後的代碼將永遠不會執行,無論CriticalChance的值是多少。 ifelse,無論執行哪種條件,函數都會返回,不再執行任何代碼。

+0

謝謝你的回答... – MiDOZ

3

由於在這之後其返回:

if(CriticalChance <= 5) 
    { 
     String temp = String.format("CRITICAL STRIKE! "+P1.getName()+" did "+P1.getAttack()+" damage to "+P2.getName()+"\n"); 
     return temp; 
    }  
    else 
    { 
     String temp = String.format(P1.getName()+" did "+P1.getAttack()+" damage to "+P2.getName()+"\n"); 
     return temp; 
    } 

任何代碼後,這是不可達(將永遠不會被執行)自兩個ifelse條件返回。因此編譯器正在抱怨。

2

接下來的代碼無法訪問,因爲沒有條件爲什麼代碼應該在if-else語句後繼續。無論哪種情況,代碼都會返回一個值。

if(CriticalChance <= 5) 
    { 
     String temp = String.format("CRITICAL STRIKE! "+P1.getName()+" did "+P1.getAttack()+" damage to "+P2.getName()+"\n"); 
     return temp; 
    }  
    else 
    { 
     String temp = String.format(P1.getName()+" did "+P1.getAttack()+" damage to "+P2.getName()+"\n"); 
     return temp; 
    } 

不可達:

if(P2.getHp() > 0) 
    { 
     String temp = String.format(P2.getName()+"'s Remaining HP is "+P2.getHp()+"\n"); 
     return temp; 
    } 
    else 
    { 
     String temp = String.format(P2.getName()+" Bled To Death!!\n"); 
     return temp; 
    } 

    break; 
    } 
    }} 
2

看起if(CriticalChance <= 5)代碼。請注意,「then」和「else」以return語句結尾。這意味着if之後的聲明無法訪問。 (和你做同樣的事情與未來if說法太...)


我還要指出的是,你違反了接受變量命名「CriticalChance」,「CritMin」和「CritMax」編碼標準。變量名應始終以小寫字母開頭。