2012-10-21 51 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”编码标准。变量名应始终以小写字母开头。