import java.util.Scanner;
public class GuessingChar {
//主方法
public static void main(String[] args) {
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(){
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;
}*/
}
return chs;
}
//对比:随机字符数组chs与用户输入的字符数组intput
public static int[] check(char[] chs,char[] input){
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;
}
}