import java.util.Scanner;
public class GuessingChar {
//主方法
public static void main(String[] args) {java
Scanner scan=new Scanner(System.in); char[] chs=generate();//获取随机字符数组 int count=0;//记录猜错的次数 while(true){//只要没猜对 就一直循环 System.out.println("猜吧!!!"); String str=scan.nextLine().toUpperCase();//获取用户收入的字符串,将字符转换成大写 if(str.equals("EXIT")){ System.out.println("下次再来吧"); break; } char[] input=str.toCharArray();//将字符串转换成char数组 int[] result=check(chs,input);//对比字符数组和系统随机数组 if(result[1]==chs.length){//位置对的个数为5,结束游戏 int score=100*result[1]-count*10;//猜对了,计算用户得分 System.out.println("恭喜你猜对了,得分为:"+score); break;//猜对了,结束循环 }else{ count++;//猜错了,次数加1 System.out.println("字符对的个数为"+result[0]+",位置对的个数为:"+result[1]);//提示用户猜字符的比较状况 } } }
//生成随机数组的方法,返回数组
public static char[] generate(){web
char [] chs=new char [5];//声明接收5个随机字符的数组 char [] letters={'A','B','C','D','F','E','G','H','I','J','K','L', 'M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};//随机的26个英文字符 boolean [] used=new boolean [letters.length];//使用状态数组,boolean数组默认false for(int i=0;i<chs.length;i++){
int index;数组
do{ index=(int)(Math.random()*26);//产生0-25随机数,对应数组A-Z字符 }while(used[index]==true);//判断index是否被使用过 chs[i]=letters[index];//没被使用则赋值 used[index]=true;//将使用过的index状态进行修改为不可用 //经过随机下标来得到随机字符数组 //判断字符状态的第二种方法 /*if(used[index]==false){ chs[i]=letters[index];//对字符数组进行赋值 used[index]=true; }else{ i--;//i会不会等于-1??? continue; }*/
}dom
return chs;
}svg
//对比:随机字符数组chs与用户输入的字符数组intput
public static int[] check(char[] chs,char[] input){code
int [] result=new int [2];//result[0]:字符对的个数;result[1]:位置对的个数 for(int i=0;i<chs.length;i++){//for嵌套循环判断两个数组的字符和位置 for(int j=0;j<input.length;j++){ if(chs[i]==input[j]){//字符猜对了 result[0]++;//字符对个数自增1 if(i==j){//位置也猜对了 result[1]++;//位置对个数自增1 } break;//字符猜对了,结束本轮循环,判断chs数组的下一个字符 } } } return result;
}
}xml