Java猜字母游戏

 * 程序随机生成5个字母让玩家猜
 * 字母和位置必须都对
 * 猜错 提醒玩家猜对了几个字母、其中位置对了几个
 * 一共500分,猜错一次扣10分;

package day07;

import java.util.Scanner;

/**
 * 猜字母游戏
 * 程序随机生成5个字母让玩家猜
 * 字母和位置必须都对
 * 猜错 提醒玩家猜对了几个字母、其中位置对了几个
 * 一共500分,猜错一次扣10分;
 * @author lixing
 */

public class GameGuessLetter {
	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		
		char[] cha = randomLetter();
		for(int i=0;i<cha.length;i++){
			System.out.print(cha[i]);
		}
		System.out.println();
		System.out.println("随机字母已生成");

		/*
		 * 玩家输入字母
		 */
		int score = 500;
		int count=0;
		do{
			System.out.println("猜吧!");
			String userStr = scan.next();
			char[] user = new char[5];//拆分玩家输入的字符串存入数组
			for(int i=0;i<user.length;i++){
				user[i] = userStr.charAt(i);
			}
			count = judge(user,cha);//位置对的
			if(count!=5){
				score -=10;
				int count2=judgeL(user,cha);//猜对的
				System.out.println("猜对了"+count2+"个字母,其中有"+count+"个位置是正确的");
			}
			
		}while(count!=5);
		System.out.println("恭喜你猜对了!得分"+score);
		
	}
	
	
	/**
	 * 生成随机字符
	 * @return
	 */
	public static char[] randomLetter(){
		char[] cha = new char[5];
		for(int i=0;i<cha.length;i++){
			int temp = 0;
			while(temp<65||temp>90){
				temp = (int)(Math.random()*100);
			}
			cha[i] = (char)temp;
		}
		return cha;
	}
	
	/*
	 * 判断位置对的有几个
	 */
	public static int judge(char[] user,char[] cha){
		int count=0;//累加位置对应的
		for(int i=0;i<cha.length;i++){
			if(user[i]==cha[i]){
				count++;
			}
		}
		return count;
	}
	
	/*
	 * 判断对了几个字母
	 */
	
	public static int judgeL(char[] user,char[] cha){
		int count2=0;
		for(int i=0;i<cha.length;i++){
			for(int j=0;j<user.length;j++){
				if(user[j]==cha[i]){
					count2++;
					user[j]='0';
					break;
				}
			}
		}
		return count2;
	}

}

前面是每听自己写的有点乱,字符有可能生成重复的

下面是老师教的方法:

排除了字符重复的方法

package day07;

import java.util.Scanner;

public class Guessing2 {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		char[] chs = generate(3);//生成随机字符数组
		System.out.println(chs);
		int score = chs.length*100;//总分
		while(true){
			System.out.println("猜吧!");
			String str = scan.nextLine().toUpperCase();//获取输入的字符串并转换为大写
			if("EXIT".equals(str)){//退出命令
				System.out.println("再见");
				break;
			}
			char[] input = str.toCharArray();//将字符串转换为字符数组
			int[] result = check(chs,input);//获取对比后的结果
			if(result[0]==chs.length){//
				System.out.println("恭喜你猜对了,得分:"+score);
				break;
			}else{
				System.out.println("猜对了"+result[1]+"个字母,其中位置对的有"+result[0]+"个");
				score -= 10;//答错一次减10分
			}
		}

	}
	/*
	 * 生成随机字符数组
	 */
	public static char[] generate(int n){
		char[] chs = new char[n];//定义随机数组
		char[] letter = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
		boolean[] flags = new boolean[letter.length];//对应每个字符,默认false
		for(int i=0;i<chs.length;){
			int index = (int)(Math.random()*letter.length);//生成0-25之间的整数
			if(flags[index]==false){//判断是否重复
				chs[i] = letter[index];
				flags[index] = true;
				i++;//不重复则进入下一轮循环
			}
		}
		return chs;
	}
	
	/*
	 * 判断 对比
	 */
	public static int[] check(char[] chs,char[] input){
		int[] result = new int[2];
		for(int i=0;i<chs.length;i++){
			for(int j=0;j<input.length;j++){
				if(chs[i]==input[j]){
					result[1] ++;//字符对的个数
					if(i == j){
						result[0] ++;//位置对的个数
					}
					break;
				}
			}
		}
		return result;
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_42595884/article/details/88200835
今日推荐