无法访问的代码Java编译错误

时间:2012-10-21 14:32:32

标签: java unreachable-code

我为我的问题搜索了很多主题,阅读了很多......但它们并不像我的那样。

我从Eclipse IDE收到“无法访问的代码”编译错误。

我不明白为什么我的代码无法访问!虽然很简单! 这是......

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;
    }
}

请帮忙!如果您需要更多信息,请告诉我。

7 个答案:

答案 0 :(得分:3)

它永远不会达到break语句,因为如果在每个分支中都有return语句,那么它肯定会从其中一个语句返回。

答案 1 :(得分: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 :(得分: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;
    }
     }}

答案 3 :(得分:2)

查看以if(CriticalChance <= 5)开头的代码。请注意,“then”和“else”都以return语句结尾。这意味着if之后的语句无法访问。 (你也可以用下一个if语句做同样的事情......)


我还应该指出,您通过命名变量“CriticalChance”,“CritMin”和“CritMax”来违反公认的编码标准。变量名应始终以小写字母开头。

答案 4 :(得分:1)

它永远不会到达休息时间;声明,因为你要从之前的if和else返回。

答案 5 :(得分: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;
    }

在此块下方,您的代码无法访问。不会执行。

答案 6 :(得分:1)

这是因为你的return temp语句,因此无论CriticalChance的值是什么,都不会执行此代码。 ifelse,无论执行哪个条件,函数都将返回,不再执行任何代码。