当前位置: 代码迷 >> J2SE >> Java中使用random(),为啥每次随机数都一样?(含代码)
  详细解决方案

Java中使用random(),为啥每次随机数都一样?(含代码)

热度:37   发布时间:2016-04-23 20:31:49.0
Java中使用random(),为何每次随机数都一样?(含代码)
各位同仁,小弟写了一段代码,模拟人与电脑猜拳-->人由控制台输入,电脑由随机数处理生成,但是发现每个回合电脑都在出一个拳。能否帮忙看下在随机数处理那块哪里出了问题?(这段代码还有其他小问题,不影响编译,属业务逻辑问题)不胜感激!

/**
 * 功能:实现一个猜拳游戏,在控制台提供输入,电脑自动随机出拳;
 *     要能够统计总共进行的次数和电脑赢得次数
 * Created by Light on 2014-7-14
 * Modified by Light on 2014-7-16
 */

package com.first;
import java.util.*;
public class FigureGuessing {
public static void main(String []args)
{
//创建游戏
FigureGuess fr = new FigureGuess();
//创建参与者
ComputerParty cp = new ComputerParty();
PersonParty pp = new PersonParty();
//开始游戏
fr.startGame(cp, pp);

}

}

/*****************************************************************************************/

//定义抽象游戏父类
abstract class Game
{
abstract public void startGame(ComputerParty cp,PersonParty pp);//开始游戏,调用actInGame()来操作;
abstract public void actInGame(ComputerParty cp,PersonParty pp);//游戏输赢判定,包含各种游戏规则实现
abstract public void stopGame(ComputerParty cp,PersonParty pp); //结束游戏,打印结束标签;
}
//定义抽象参与者类
abstract class Participate
{
public static int maxCount = 0;//最多参与回合数
public static int realCount = 0;//实际参与回合数
public static int winCount = 0;//赢的回合数
abstract public void setRounds(int rounds);//定义参与回合数(可选)
  abstract public String playGame();//参与游戏,定义如何参与游戏
  abstract void outOfGame();//停止参与游戏,定义停止后的操作,包括是否打印出参赛结果
}



/*****************************************************************************************/

//定义猜拳游戏类继承余Game
class FigureGuess extends Game
{
//开始游戏,调用actInGame()来操作;
public void startGame(ComputerParty cp,PersonParty pp)
{
actInGame(cp,pp);
}
//游戏输赢判定,包含各种游戏规则实现
    public void actInGame(ComputerParty cp,PersonParty pp)
    {
     //调用参与者参与游戏
    //首次接受游戏参与者输入---i-->ComputerParty; j-->PersonParty
  int i = Integer.parseInt(cp.playGame());
    int j = Integer.parseInt(pp.playGame());
    //只要玩家输入非4、5,则游戏判定继续
     while(j!=4 && j!=5)
     {
        //游戏输赢判定
        //游戏规则判断,谁赢谁输,并输出结果

       
      //重置两个参与者的输入,如果玩家输入4或者5,则在下一轮判定之前退出游戏
      //人先出拳
      j = Integer.parseInt(pp.playGame());
     i = Integer.parseInt(cp.playGame());

      }
    
     //退出循环时,无论是主动还是被动,表示游戏已经结束了
     stopGame(cp,pp);
    }
    //结束游戏,打印结束标签;
public void stopGame(ComputerParty cp,PersonParty pp)
{
pp.outOfGame();
cp.outOfGame();
ComputerParty.showWinCount();
}
}

/*****************************************************************************************/


//定义子类电脑继承于Participate
class ComputerParty extends Participate
{
//电脑随机产生一个数字,代表拳头(0)、布(1)、剪刀(2)
Random rd = new Random();
    int figur = Math.abs(rd.nextInt(ComputerParty.realCount+1))%3 ; 

//初始化回合数(可选),如果设置了回合数,在达到此数值时自动推出游戏;如果未设置,则根据输入判定是否继续游戏
public void setRounds(int rounds)
{
ComputerParty.maxCount = rounds;
}
//定义如何进行参与游戏,包含对何时退出游戏的定义,保证参与者的主动性;但是由于电脑是被动一方,不主动退出游戏
public String playGame()
{
//System.out.print(Participate.count);
ComputerParty.realCount++;
return String.valueOf(figur);

}
//showFigur
public void showFigur()
{
switch(figur){
case 0: System.out.println("电脑出拳头!"); break;
case 1: System.out.println("电脑出布!"); break;
case 2: System.out.println("电脑出剪刀!"); break;
default:System.out.println("出的啥啊,没看见!");break;
}

}
//退出游戏操作
public void outOfGame()
{
System.out.println("对手退出了游戏,电脑自动退出游戏!");
}

//定义showWinCount方法
public static void showWinCount()
{
System.out.println("电脑总共赢了"+ComputerParty.winCount+"回合");
}

}

/*****************************************************************************************/

//定义人参与者类继承于Participate类
class PersonParty extends Participate
{
int figur = 0;
//初始化回合数(可选),如果设置了回合数,在达到此数值时自动推出游戏;如果未设置,则根据输入判定是否继续游戏
public void setRounds(int rounds)
{
PersonParty.realCount=rounds;
}

//定义如何进行参与游戏,包含对何时退出游戏的定义,保证参与者的主动性;
public String playGame()
{

//提示输入数字来代表出拳
System.out.println("请出拳(0-拳头;1-布;2-剪刀;4-退出):");
//接受输入
Scanner sr = new Scanner(System.in);
  相关解决方案