/* * 猜字母游戏 * 要求: * 1,系统随机生成5个不同的字母 * 2,用户输入5个不同的字母去匹配 * 3,输出结果包括正确字母个数和正确位置个数 * 4,统计得分,总共500分,错一次扣10分 * 5,输入EXIT退出游戏 * */ /* * 分析: * 数据结构: * 采用数组来存储字母 * 第一步:产生5个不同的字母 * 用方法实现generate() * 随机产生字母的方法Java没有提供,需要自己设计: * 可以随机产生数字做数组的下表。 * 第二步:比较两个数组的字母check() * 判断字母对的个数和位置对的个数 * * 第三步:main()函数 * 输出结果 * */ package day06; import java.util.Scanner; public class Guessing { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner scan = new Scanner(System.in); System.out.println('游戏开始啦----->ready go......'); char[] chs = generate(); //作弊,提示正确答案 //注意因为'要猜的字母是:'和chs不能写在同一个输出语句中 System.out.print('提示:要猜的字母是:'); System.out.println(chs);//专门打印出数组,Java给出的功能 int count=0;//标记猜错的次数 while(true){//这里创建while循环是为了后面break跳出循环,因为是exit就不需要进入循环了, //同时猜对了也要跳出,不然就是死循环了还会让你继续猜 System.out.println('写出你猜的字母:'); //然后用户输入字母 String str = scan.next().toUpperCase();//对输入的字母不区分大小写,因为会转化为大写 if(str.equals('EXIT')){ System.out.println('欢迎下次再来!!!'); break; } char[] input = str.toCharArray();//转化为数组 //比较 int[] result = check(chs,input); System.out.println('字母正确个数是:'+result[1]); System.out.println('位置正确个数是:'+result[0]); //添加一个得分功能的话上面的代码需要修改 //判断猜对了只要是猜对的位置个数是5就行 if(result[0]==chs.length){ System.out.println('恭喜你猜对了!!!'); int score = chs.length*100-count*10; System.out.println('你的得分是:'+score); break; } else{ count++; //System.out.println('你的答案中字母正确个数为:'+result[1]+',位置正确个数为:'+result[0]); } } } /* * * */ public static char[] generate(){//看到不是viod就必须有返回 char[] chs = new char[5]; char[] array = new char[]{'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'}; //int index = (int)(Math.random()*array.length);产生随机值一定要放在循环体里面,否则的话可能一直产生某一个值不进入赋值 //int index = (int)(Math.random()*array.length);//一共有26个字母 boolean[] flags = new boolean[array.length];//默认值为false,给array每个元素标记 //给chs元素赋值 for(int i=0;i<> //chs[i]=array[index];//这里如果就这样的话会可能产生相同的字母,不符合要求,代码需要修正,采用标记的方法来修正 /* * 给array中每个元素标记false,当取到了某个字母时候,对其进行标记true不再访问 * 这里要使用到循环,do……while适合在这里,第一遍是必须要走的 * */ int index;//必须声明 do{ index = (int)(Math.random()*array.length);//一共有26个字母 }while(flags[index]==true); chs[i]=array[index]; flags[index]=true; } return chs; } /* * 比较两个数组,采用数组来获得结果 * 比较获得的结果有两个 * 一个是字母相同数 * 一个是位置相同数 * 所以采用一个长度为2的数组来存储 * */ public static int[] check(char[] chs,char[] input){//看到不是viod就必须有返回 int[] result = new int[2];//默认值result[0]=0,result[1]=0 //result[0]存储位置相同的个数result[1]存储字母相同的个数 //两个数组的每个元素都要比较,从chs的第一个开始逐一跟input的每一个比较,for循环嵌套 for(int i=0;i for(int j=0;j<> //开始比较 if(chs[i]==input[j]){//找到相同字母,跳出最里面的循环 result[1]++; if(i==j){//位置相同 result[0]++; } break; } } } return result; } } 程序运行结果演示 程序运行结果演示 程序运行结果演示 程序运行结果演示程序运行结果演示 |
|