-4

我为我的问题搜索了很多主题,阅读了很多……但它们与我的不完全一样。

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

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

4

7 回答 7

3

它永远不会到达那个break语句,因为在它之前是 if elsesreturn在每个分支中都有语句,所以它肯定会从其中一个返回。

于 2012-10-21T14:34:27.693 回答
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条件。因此编译器抱怨。

于 2012-10-21T14:36:53.117 回答
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;
    }
     }}
于 2012-10-21T14:37:18.133 回答
2

查看以if(CriticalChance <= 5). 请注意,“then”和“else”都以return语句结尾。这意味着后面的语句if是不可访问的。(你也对下if一条语句做同样的事情......)


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

于 2012-10-21T14:37:33.197 回答
1

它永远不会中断;声明,因为您要退出之前的 if 和 else。

于 2012-10-21T14:35:48.013 回答
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;
    }

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

于 2012-10-21T14:35:48.750 回答
1

这是因为您的return temp语句,因为无论CriticalChance. ifor ,无论执行哪个条件,else函数都将返回并且不再执行任何代码。

于 2012-10-21T14:35:55.857 回答