/**
有个人 小范 设计他的成员变量. 成员方法, 可以电脑猜拳. 电脑每次都会随机生成 0, 1, 2
0 表示 石头 1 表示剪刀 2 表示 布
并要可以显示 小范 的输赢次数(清单), 假定 玩三次.
思路:实现一次猜拳 → 实现无限循环次猜拳(输入3退出) → 使用数组保存每次猜拳结果
1.使用随机数生成系统的出拳,控制台输入Tom的出拳
2.比较参数 0 > 1 , 1 > 2 , 2 > 0 .输出结果
3.使用do...while 循环 实现无限次猜拳
4. 使用二维数组 arr[n][3] 保存猜拳结果 , n为猜拳次数,arr[n][0] 为系统出拳
arr[n][1] 为 Tom 出拳 ,arr[n][2] 为 猜拳结果 ,动态更新arr。
5. 最后显示出一共赢了多少次,输了多少次,平局多少次
*/
import java.util.Scanner;
public class HomeWork {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入你的名字:");
String name = input.next();
Person p = new Person(name);
p.mora(name);
}
}
class Person
{
String name;
int out;//出拳参数
Scanner input = new Scanner(System.in);
public Person(){}
public Person(String name){
this.name = name;
}
public void mora(String name){ //猜拳方法,name用于最后打印输出 输赢结果
int count = 0; // 用来标志 第几次猜拳
int[][] arr = new int[1][3];//使用二维数组 arr[n][3] 保存猜拳结果
do{
int systemIn = (int)(Math.random()*2 + 1);//生成 0-2的随机数
//System.out.println(systemIn);
int res = 0; // 保存猜拳结果,-1为输 0为平局 1为赢
System.out.println("请出拳(0 表示石头,1 表示剪刀,2 表示布 ,3退出):");
out = input.nextInt();
//保护机制
while(out<0 || out>4){
System.out.println("输入错误!请重新输入(0 表示石头,1 表示剪刀,2 表示布,3退出):");
out = input.nextInt();
}
if(out == 3){ //退出
break;
}
switch(systemIn){//判断输赢
case 0://电脑出石头
if(out == 0){
res = 0;
}else if(out == 1){
res = -1;
}else{
res = 1;
}
break;
case 1://电脑出剪刀
if(out == 0){
res = 1;
}else if(out == 1){
res = 0;
}else{
res = -1;
}
break;
case 2://电脑出布
if(out == 0){
res = -1;
}else if(out == 1){
res = 1;
}else{
res = 0;
}
break;
}
switch(res){//输出结果
case -1:
System.out.println("你输了!");
break;
case 0:
System.out.println("平局!");
break;
case 1:
System.out.println("你赢了!");
break;
}
//保存结果
arr[count][0] = systemIn;//arr[n][0] 为系统出拳
arr[count][1] = out;//arr[n][1] 为 Tom 出拳
arr[count][2] = res;//arr[n][2] 为 猜拳结果
count++;//改变count的值,准备进行下一次猜拳
//因为count是从0开始的,这里要先进行count++,再数组扩容,不然会出现数组下标越界异常。
int[][] temp = new int[count+1][3];//建立中间数组,进行数组扩容
for(int i =0;i
for(int j = 0;j
temp[i][j] = arr[i][j];
}
}
arr = temp;
}while(out != 3);
//退出循环后,输出打印进行过的对局结果。
//打印结果的同时,累加变量 winCount ,loseCount ,drawCount
int winCount = 0;//赢的次数
int loseCount = 0;//输的次数
int drawCount = 0;//平局次数
for(int k = 0;k
switch(arr[k][2]){//根据输赢进行判断
case -1:
System.out.printf("第%d次猜拳 系统出拳 %S ,你出拳 %S ,你输了!",(k+1),print(arr[k][0]),print(arr[k][1]));
loseCount++;
break;
case 0:
System.out.printf("第%d次猜拳 系统出拳 %S ,你出拳 %S ,平局!",(k+1),print(arr[k][0]),print(arr[k][1]));
drawCount++;
break;
case 1:
System.out.printf("第%d次猜拳 系统出拳 %S ,你出拳 %S ,你赢了!",(k+1),print(arr[k][0]),print(arr[k][1]));
winCount++;
break;
}
System.out.println();
}
System.out.printf("%S一共赢了%d次,输了%d次,平局%d次。\n",name,winCount,loseCount,drawCount);
}
public String print(int a){//用于输出石头 剪刀 布
String out = "";
if(a == 0){
out = "石头";
}else if(a == 1){
out = "剪刀";
}else{
out = "布";
}
return out;
}
}