zoukankan      html  css  js  c++  java
  • Java基础之:猜拳小程序

    /**
    	有个人 小范 设计他的成员变量. 成员方法, 可以电脑猜拳. 电脑每次都会随机生成 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次。
    ",name,winCount,loseCount,drawCount);
    	}
    		
    	public String print(int a){	//用于输出石头 剪刀 布
    		String out = "";
    		if(a == 0){
    			out = "石头";
    		}else if(a == 1){
    			out = "剪刀";
    		}else{
    			out = "布";
    		}
    		return out;
    	}
    }
    

      

  • 相关阅读:
    1058 A+B in Hogwarts (20)
    1046 Shortest Distance (20)
    1061 Dating (20)
    1041 Be Unique (20)
    1015 Reversible Primes (20)(20 分)
    pat 1027 Colors in Mars (20)
    PAT 1008 Elevator (20)
    操作系统 死锁
    Ajax的get方式传值 避免& 与= 号
    让IE浏览器支持CSS3表现
  • 原文地址:https://www.cnblogs.com/SongHai/p/14040294.html
Copyright © 2011-2022 走看看