-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

この後に戻ってきてから:

   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 に答える
3

breakif elses がreturn各ブランチにあるため、そのステートメントに到達することはありません。そのため、それらのいずれかから確実に戻ります。

于 2012-10-21T14:34:27.693 に答える
2

で始まるコードを見てくださいif(CriticalChance <= 5)。「then」と「else」の両方がreturnステートメントで終わっていることに注意してください。これは、 の後のステートメントにif到達できないことを意味します。if(そして、次のステートメントでも同じことを行います...)


また、変数に「CriticalChance」、「CritMin」、「CritMax」という名前を付けることで、受け入れられているコーディング標準に違反していることも指摘する必要があります。変数名は常に小文字で始める必要があります。

于 2012-10-21T14:37:33.197 に答える
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 に答える
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の値に関係なく、この後のコードは実行されないため、ステートメントが原因ですCriticalChanceifまたは、どちらのelse条件が実行されても、関数は戻り、それ以上のコードは実行されません。

于 2012-10-21T14:35:55.857 に答える