/** 有个人 小范 设计他的成员变量. 成员方法, 可以电脑猜拳. 电脑每次都会随机生成 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<arr.length;i++){ for(int j = 0;j<arr[i].length;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 <count;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; } }