问题描述
有人Tom设计他的成员变量,成员方法,可以电脑猜拳,电脑每次都会随机生成0,1,2
0表示石头,1表示剪刀,2表示布
并要可以显示Tom的输赢次数(清单)
代码实现
1.根据问题描述,需要定义的变量:玩家出拳的类型;电脑出拳的类型;玩家赢的次数;比赛的次数`
//玩家出拳的类型
int tomGuessNum; //0,1,2
//电脑出拳的类型
int comGuessNum; //0,1,2
//玩家赢的次数
int winCountNum;
//比赛的次数
int count = 1;
2.定义函数记录电脑的出拳
public int computerNum(){
//在java中生成一个指定范围内的随机数字有两种方法:一种是调用Math类的random()方法,一种是使用Random类
//Random类提供了丰富的随机数生成方法,可以产生boolean,int,long,float,byte数组以及double类型的随机数
//random()方法只能产生double类型的0-1的随机数
Random r = new Random();
comGuessNum = r.nextInt(3);//数值介于[0,3)含0而不包括3
return comGuessNum;
}
3.定义函数记录Tom的出拳类型,如果输入数据有误,则抛出异常
public void setTomGuessNum(int tomGuessNum){
if (tomGuessNum > 2 || tomGuessNum < 0){
throw new IllegalArgumentException("输入错误");
}
this.tomGuessNum = tomGuessNum;
}
4.定义函数获取Tom的出拳
public int getTomGuessNum(){
return tomGuessNum;
}
5.定义函数判断猜拳输赢
public String vsComputer(){
if(tomGuessNum == 0 && comGuessNum ==1){
return "你赢了";
} else if (tomGuessNum == 1 && comGuessNum == 2) {
return "你赢了";
} else if (tomGuessNum == 2 && comGuessNum == 0) {
return "你赢了";
} else if (tomGuessNum == comGuessNum) {
return "平手";
}else {
return "你输了";
}
}
6.记录赢的局数,如果获得的返回值是"你赢了",那么赢的局数加一
public int winCount(String s){
count++;
if (s.equals("你赢了")){
isWinNum++;
}
return isWinNum;
}
7.因为要创建一个清单记录输赢情况,所以需要定义一个二维数组作为表格存储出拳情况.然后再创建一个一维数组存储输赢情况
int[][] arr1 = new int[3][3];
String[] arr2 = new String[3];
8.编写主函数
for (int i = 0; i < 3; i++){//三局比赛
//获取玩家Tom的出拳,放入二维数组中
System.out.println("请输入你要出的拳(0-拳头,1-剪刀,2-布):");
int num = myScanner.nextInt();
tom.setTomGuessNum(num);
int tomGuessNum = tom.getTomGuessNum();
arr1[i][j + 1] = tomGuessNum;
//获取电脑的出拳,放入二维数组中
int comGuessNum = tom.computerNum();
arr1[i][j + 2] = comGuessNum;
//比较Tom和电脑的输赢,放入一维数组中
String isWin = tom.vsComputer();
arr2[i] = isWin;
arr1[i][j] = tom.count;
//将每一局输赢情况输出
System.out.println("=================================");
System.out.println("局数\t玩家的出拳\t电脑的出拳\t输赢情况");
System.out.println(tom.count + "\t" + tomGuessNum + "\t" + comGuessNum + "\t" + tom.vsComputer());
System.out.println("=================================");
isWinCount = tom.winCount(isWin);
}
//将所有情况输出
System.out.println("局数\t玩家的出拳\t电脑的出拳\t输赢情况");
for (int a = 0; a < arr1.length; a++){
for (int b= 0; b < arr1[a].length; b++){
System.out.print(arr1[a][b] + "\t");
}
System.out.println(arr2[a]);
}
System.out.println("你赢了" + isWinCount + "次");
运行结果
完整代码
public class HomeWork14Exercise {
public static void main(String[] args) {
TomExercise tom = new TomExercise();
int isWinCount = 0;
//创建一个二维数组作为表格存储出拳情况
int[][] arr1 = new int[3][3];
int j = 0;
Scanner myScanner = new Scanner(System.in);
//创建一个一维数组存储输赢情况
String[] arr2 = new String[3];
for (int i = 0; i < 3; i++){//三局比赛
//获取玩家Tom的出拳,放入二维数组中
System.out.println("请输入你要出的拳(0-拳头,1-剪刀,2-布):");
int num = myScanner.nextInt();
tom.setTomGuessNum(num);
int tomGuessNum = tom.getTomGuessNum();
arr1[i][j + 1] = tomGuessNum;
//获取电脑的出拳,放入二维数组中
int comGuessNum = tom.computerNum();
arr1[i][j + 2] = comGuessNum;
//比较Tom和电脑的输赢,放入一维数组中
String isWin = tom.vsComputer();
arr2[i] = isWin;
arr1[i][j] = tom.count;
//将每一局输赢情况输出
System.out.println("=================================");
System.out.println("局数\t玩家的出拳\t电脑的出拳\t输赢情况");
System.out.println(tom.count + "\t" + tomGuessNum + "\t" + comGuessNum + "\t" + tom.vsComputer());
System.out.println("=================================");
isWinCount = tom.winCount(isWin);
}
//将所有情况输出
System.out.println("局数\t玩家的出拳\t电脑的出拳\t输赢情况");
for (int a = 0; a < arr1.length; a++){
for (int b= 0; b < arr1[a].length; b++){
System.out.print(arr1[a][b] + "\t");
}
System.out.println(arr2[a]);
}
System.out.println("你赢了" + isWinCount + "次");
}
}
class TomExercise{
//记录Tom的出拳
int tomGuessNum;
//记录电脑的出拳
int comGuessNum;
//记录赢的次数
int isWinNum;
//记录局数,即当前是第count局
int count = 1;
//定义函数记录电脑的出拳
public int computerNum(){
//在java中生成一个指定范围内的随机数字有两种方法:一种是调用Math类的random()方法,一种是使用Random类
//Random类提供了丰富的随机数生成方法,可以产生boolean,int,long,float,byte数组以及double类型的随机数
//random()方法只能产生double类型的0-1的随机数
Random r = new Random();
comGuessNum = r.nextInt(3);//数值介于[0,3)含0而不包括3
return comGuessNum;
}
//定义函数记录Tom的出拳
public void setTomGuessNum(int tomGuessNum){
if (tomGuessNum > 2 || tomGuessNum < 0){
throw new IllegalArgumentException("输入错误");
}
this.tomGuessNum = tomGuessNum;
}
//定义函数获取Tom的出拳
public int getTomGuessNum(){
return tomGuessNum;
}
//定义函数判断猜拳输赢
public String vsComputer(){
if(tomGuessNum == 0 && comGuessNum ==1){
return "你赢了";
} else if (tomGuessNum == 1 && comGuessNum == 2) {
return "你赢了";
} else if (tomGuessNum == 2 && comGuessNum == 0) {
return "你赢了";
} else if (tomGuessNum == comGuessNum) {
return "平手";
}else {
return "你输了";
}
}
//记录赢的局数
public int winCount(String s){
count++;
if (s.equals("你赢了")){
isWinNum++;
}
return isWinNum;
}
}