math.random()数字不重新播种Java

时间:2019-07-19 12:59:11

标签: java

每次使用Math.random()调用函数时,我都试图获取随机数。无论出于何种原因,每次通话都选择相同的两个数字(第一次通话只能随机选择)

RockpaperScissorsLizardSpock()对象有一个用于调用随机数的方法,但是我通过让play方法直接获取随机数而绕过了测试。

public static void main(String[] args) {
    // TODO code application logic here

    RockPaperScissorsLizardSpock game = new RockPaperScissorsLizardSpock();
    while(game.getConsecutiveWins()<4){
        game.play(((int)(Math.random()*5)+1),((int)(Math.random()*5)+1));
    }
    if (game.getLastWinner()==1){
        System.out.println(System.lineSeparator() + "Player 1 Wins!");
    } else{
        System.out.println(System.lineSeparator() + "Player 2 Wins!");
    }

}

while循环应该一直运行,直到连续赢得四局为止。

  

玩家1选择摇滚   玩家2选择Spock。   Spock。击败岩石。玩家2获胜

     

玩家1选择摇滚   玩家2选择Spock。   Spock。击败岩石。玩家2获胜

     

玩家1选择摇滚   玩家2选择Spock。   Spock。击败岩石。玩家2获胜

     

玩家1选择摇滚   玩家2选择Spock。   Spock。击败岩石。玩家2获胜

     

玩家2获胜!

以下是与游戏相关的调用方法:

public void play(int player1, int player2){
    consecutiveWins = 0;
    lastWinner = 0;

    while (consecutiveWins<4){
    int p1Choice = player1;
    int p2Choice = player2;
    int pWinner = 0;

    switch (p1Choice) {
        case 1://Player 1 rock              

            System.out.println("Player 1 Chooses Rock");
            if (p2Choice == 1){ //Player 1 rock vs Player 2 rock - tie
                pWinner = 0;
            } else if (p2Choice == 2){ 
                pWinner = 2;//P2 paper - P2
            } else if (p2Choice == 3){// P2 Scissors - P1 Wins                    
                pWinner = 1;
            } else if (p2Choice == 4){//P2 Lizard - P1 Win
                pWinner = 1;
            }else {//p2 spock = P2 Win
                pWinner = 2;
            }
            break;

        case 2: //P1 paper -- not done

            System.out.println("Player 1 Chooses Paper");
            if (p2Choice == 1){ //Player 1 rock vs Player 2 rock - tie
                pWinner = 0;
            } else if (p2Choice == 2){ 
                pWinner = 2;//P2 paper - P2
            } else if (p2Choice == 3){// P2 Scissors - P1 Wins                    
                pWinner = 1;
            } else if (p2Choice == 4){//P2 Lizard - P1 Win
                pWinner = 1;
            }else {//p2 spock = P2 Win
                pWinner = 2;
            }
            break; 

            case 3: //P1 scissors -- not done

            System.out.println("Player 1 Chooses Scissors");
            if (p2Choice == 1){ //Player 1 rock vs Player 2 rock - tie
                pWinner = 0;
            } else if (p2Choice == 2){ 
                pWinner = 2;//P2 paper - P2
            } else if (p2Choice == 3){// P2 Scissors - P1 Wins                    
                pWinner = 1;
            } else if (p2Choice == 4){//P2 Lizard - P1 Win
                pWinner = 1;
            }else {//p2 spock = P2 Win
                pWinner = 2;
            }
            break; 

            case 4: //P1 lizard -- not done

            System.out.println("Player 1 Chooses Lizard");
            if (p2Choice == 1){ //Player 1 rock vs Player 2 rock - tie
                pWinner = 0;
            } else if (p2Choice == 2){ 
                pWinner = 2;//P2 paper - P2
            } else if (p2Choice == 3){// P2 Scissors - P1 Wins                    
                pWinner = 1;
            } else if (p2Choice == 4){//P2 Lizard - P1 Win
                pWinner = 1;
            }else {//p2 spock = P2 Win
                pWinner = 2;
            }
            break; 

            case 5: //P1 Spock -- not done

            System.out.println("Player 1 Chooses Spock");                    
            if (p2Choice == 1){ //Player 1 rock vs Player 2 rock - tie
                pWinner = 0;
            } else if (p2Choice == 2){ 
                pWinner = 2;//P2 paper - P2
            } else if (p2Choice == 3){// P2 Scissors - P1 Wins                    
                pWinner = 1;
            } else if (p2Choice == 4){//P2 Lizard - P1 Win
                pWinner = 1;
            }else {//p2 spock = P2 Win
                pWinner = 2;
            }
            break;
    }

    if(pWinner==1){
        System.out.println("Player 2 chooses " + convert(p2Choice));
        System.out.println(convert(p1Choice) + " beats " + 
            convert(p2Choice) + " Player 1 wins" + System.lineSeparator());
        if(lastWinner == PLAYER1){
            consecutiveWins +=1;
        }else{
            lastWinner = PLAYER1;
            consecutiveWins = 1;
        }
    } else if (pWinner==2){
        System.out.println("Player 2 chooses " + convert(p2Choice));
        System.out.println(convert(p2Choice) + " beats " + 
            convert(p1Choice) + " Player 2 wins" + System.lineSeparator());

        if(lastWinner == PLAYER2){
            consecutiveWins +=1;
        }else{
            lastWinner = PLAYER2;
            consecutiveWins = 1;
        }               
    } else {
        System.out.println("Player 2 also chooses " + convert(p2Choice));
        System.out.println("It's a tie!");
        }        
    }
}

1 个答案:

答案 0 :(得分:2)

play方法中的循环是多余的,应该删除。

while (consecutiveWins<4){

编辑:为防止无限循环,您还必须移动

consecutiveWins = 0;

退出play方法(可能进入构造方法)

相关问题