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

当前位置:我的异常网» J2SE » Java中使用random(),为啥每次随机数都一样?(含代

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

www.myexceptions.net  网友分享于:2014-07-20  浏览: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);

文章评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值