1

このプログラムは、3 つの異なる方法でクラップスを再生します。クラップスをプレイするのに助けが必要ですが、これらの 3 つの異なる方法が必要ですが、何らかの理由でコンパイルするたびに次のエラーが発生します。

CrapsAnalysis.java:48: error: missing return statement
    }
    ^
1 error
Process javac exited with code 1

コード:

public class CrapsAnalysis
{   
public static int rollDie( int n) {
    return (int)(Math.random()*n) + 1 ;
}
public static int rollDice( ) {
    return rollDie(6) + rollDie(6) ;
}
public static boolean playOneGame( ) {
    int newDice = rollDice();
    int roll = rollDice(); //first roll of the dice
    int playerPoint = 0; //player point if no win or loss on first roll
    if (roll == 7 || roll == 11)
        return true;
    else if (roll == 2 || roll == 3 || roll == 12)
        return false;
    else    
        playerPoint = roll;
    do {
        if (rollDice() == 7)
            return false;
        else if (rollDice() == playerPoint) 
            return true;
        else
            newDice = rollDice();
        } while (rollDice() != playerPoint || rollDice() != 7) ;
    }
}
4

8 に答える 8

3

次のように、コードの後に​​最後の return ステートメントを追加できます。

public static boolean playOneGame() {
    int newDice = rollDice();
    int roll = rollDice(); // first roll of the dice
    int playerPoint = 0; // player point if no win or loss on first roll

    if (roll == 7 || roll == 11)
        return true;
    else if (roll == 2 || roll == 3 || roll == 12)
        return false;
    else
        playerPoint = roll;
    do {
        if (rollDice() == 7)
            return false;
        else if (rollDice() == playerPoint)
            return true;
        else
            newDice = rollDice();
    } while (rollDice() != playerPoint || rollDice() != 7);

    return false;
}

これによりコンパイルが行われ、コードは引き続き機能します。

于 2013-10-18T20:01:05.980 に答える
2

returnwhile ブロックに a がありません:

public static boolean playOneGame( ) {
   int newDice = rollDice();
   int roll = rollDice(); //first roll of the dice
   int playerPoint = 0; //player point if no win or loss on first roll

   if (roll == 7 || roll == 11)
      return true;
   else if (roll == 2 || roll == 3 || roll == 12)
      return false;
   else    
      playerPoint = roll;
      do {
            if (rollDice() == 7)
              return false;
            else if (rollDice() == playerPoint) 
              return true;
            else
              newDice = rollDice();

} while (rollDice() != playerPoint || rollDice() != 7) 
     **// You are missing a return statement here.**;
于 2013-10-18T20:00:21.847 に答える
2
public static boolean playOneGame( ) {
    int newDice = rollDice();
    int roll = rollDice(); //first roll of the dice
    int playerPoint = 0; //player point if no win or loss on first roll

    if (roll == 7 || roll == 11)
        return true;
    else if (roll == 2 || roll == 3 || roll == 12)
       return false;
    else    
       playerPoint = roll;
        do {
            if (rollDice() == 7)
                return false;
            else if (rollDice() == playerPoint) 
                return true;
            else
                newDice = rollDice();
        } while (rollDice() != playerPoint || rollDice() != 7) ;
        return SOMETHING HERE;
}

一貫したコード形式を調べる必要があります。私たちだけでなく、あなた自身のためにも、数週間後にこのコードを見ると、まだ読むことができます.

于 2013-10-18T20:00:56.670 に答える
2

return を追加する必要がある場合は、add aステートメントreturnの可能な実行パスごとに必ず追加してください。default returnプログラムには両方がありません

public class CrapsAnalysis
        {   
            public static int rollDie( int n) {
                return (int)(Math.random()*n) + 1 ;
            }
            public static int rollDice( ) {
            return rollDie(6) + rollDie(6) ;
            }
            public static boolean playOneGame( ) {
                int newDice = rollDice();
                int roll = rollDice(); //first roll of the dice
                int playerPoint = 0; //player point if no win or loss on first roll

                if (roll == 7 || roll == 11)
                return true;<--- Works
                else if (roll == 2 || roll == 3 || roll == 12)
                   return false;<--- Works
                else    
                   playerPoint = roll;
                    do {
                    if (rollDice() == 7)
                    return false;<--- Works
                    else if (rollDice() == playerPoint) 
                    return true;<--- Works
                    else
                    newDice = rollDice();     
            } while (rollDice() != playerPoint || rollDice() != 7) ;
    //No return here. You need to add a default return if none of the conditions above satisfies
        }
        }
于 2013-10-18T20:02:32.767 に答える
1

これは、コードの非常に簡素化されたバージョンです。

public static boolean playOneGame()
{
    if(condition1 == true)
    {
        //code1
        return true;
    }
    else if(condition2 == true)
    {
        //code2
        return false;
    }
    else
    {
        //code3
    }
    //code4
}

condition1orcondition2が true の場合、true またはplayOneGame()false のいずれかを返します。ただし、condition1condition2両方ともfalse の場合、実行されるコードは code3 だけです。code3 には return ステートメントが含まれていないため、理論的にはplayOneGame()何も返さない可能性があります。と が両方とも false になることcondition1ありcondition2ませんが、Java コンパイラはそうではないため、コンパイラ エラーがスローされます。コンパイラ エラーがスローされずcondition1condition2何らかの理由で両方が false になった場合、実行時エラーがスローされます。実行時エラーはコンパイラ エラーよりもデバッグがはるかに難しいため、コンパイラは簡単に修正できるエラーをスローすることでユーザーに有利に働きます。

不足している return ステートメントを修正するには、return ステートメントを code3 または code4 に追加します。

于 2013-10-18T20:19:56.467 に答える
0

if/else ステートメントが実行される場合と実行されない場合があるため、while ループの後に return ステートメントが必要です。それらのいずれも実行されない場合、リターンはありません。したがって、常に実行できる return ステートメントが少なくとも 1 つあることを確認する必要があります。

public static boolean playOneGame( ) {
    int newDice = rollDice();
    int roll = rollDice(); //first roll of the dice
    int playerPoint = 0; //player point if no win or loss on first roll

    if (roll == 7 || roll == 11)
        return true;
    else if (roll == 2 || roll == 3 || roll == 12)
       return false;
    else    
       playerPoint = roll;
        do {
            if (rollDice() == 7)
                return false;
            else if (rollDice() == playerPoint) 
                return true;
            else
                newDice = rollDice();
        } while (rollDice() != playerPoint || rollDice() != 7) ;
    return false;
}

また、わかりやすくするために、if/else ステートメントを再配置して、読みやすくしました。他の人があなたのコードをより簡単に理解できるように、これを行う習慣を身につけたいと思うかもしれません.

于 2013-10-18T19:59:47.427 に答える