0

私は roshambo (またはじゃんけん) を実行しようとしており、0 から 2 までのランダムな値の代わりにコンピューターにじゃんけんを出力させようとしています。ただし、ランダムな値が得られません。プログラムが実行されると while ループが実行され、ループを実行するたびに値は変わりません。ただし、アプリケーションを停止してから再実行すると、値が変更され、ループ中は同じ値のままになります。このメソッドを正しくコーディングしていますか?

public class Player2 extends Player{

    private Random rand;

    public Player2(){
        rand = new Random();
    }

    public Roshambo generateRoshambo() {
        int min = 0;
        int max = 2;
        int randomNum = rand.nextInt(max - min + 1) + min;

        if(randomNum == 0){
            return Roshambo.ROCK;
        } else if (randomNum == 1) {
            return Roshambo.PAPER;
        } else {
            return Roshambo.SCISSORS;
        }
    }
}

ループは次のとおりです。

Roshambo value = p2.generateRoshambo(); 
String cont = "Yes";

do{

        System.out.print("\nRock, Paper, or Scissors: ");
        String choice = sc.nextLine();


        System.out.println("\n" + name + ": " + choice);
        System.out.println("Computer: " + value);

        if (value == ...)
        {
            System.out.println("\n" + name + " Wins!\n");
        } 

        else if (value == ...)
        {
            System.out.println("\nYou Tied!\n");
        }

        else 
        {
            System.out.println("\nThe Computer Wins!\n");
        }

        System.out.print("Play again? (Yes/No): ");
        cont = sc.nextLine();
    } while (cont.equalsIgnoreCase("Yes"));
4

2 に答える 2

6

私は自分の間違いに気づきました。do-while ループの外で p2.generateRoshambo() を呼び出しました。以下をループに入れることで、問題を解決できました。

Roshambo value = p2.generateRoshambo()
于 2013-01-08T23:18:47.493 に答える
1

この症状の原因として最も可能性が高いのは、毎回新しい Random インスタンスを作成することです。デフォルトのシードは、タイトなループでカチカチ音をたてていない可能性のあるクロックに基づいています。Random インスタンスをできるだけ少なく作成し、通常はプログラム内に 1 つだけ作成し、そこから値を取得し続けることが重要です。

于 2013-01-08T23:07:46.510 に答える