猜字符小游戏:
1.设计数据结构:变量
1)char[] chs; //随机字符数组
2)char[] input; //用户输入的字符数组
3)int[] result; //对比结果
4)int score; //得分
2.设计程序结构:方法
1)主方法:
public static void main(String[] args){
//...
}
2)生成随机字符数组chs:
public static char[] generate(){
char[] chs = new char[5];
//...
return chs;
}
3)对比:随机字符数组chs与用户输入的字符数组input
public static int[] check(char[] chs,char[] input){
int[] result = new int[2];
//...
return result;
}
3.设计算法:方法体
//具体代码
import java.util.Scanner;
//猜字符小游戏
public class Guessing {
//主方法
public static void main(String[] args) {
char[]chs=gennerate();//随机生成的字符数组
//System.out.println(chs);//作弊输出
int count=0;//猜错的次数
Scanner scan=new Scanner(System.in);
while(true){//自造死循环
System.out.println("猜吧!");
String str = scan.next().toUpperCase();//用户输入一个字符串str
if(str.equals("EXIT")){//判断字符串内容相同
System.out.println("下次再来吧!!!");
break;
}
char[]input=str.toCharArray();//将字符串转化成字符组类型
if(input.length>5){
System.out.println("你输入的字符数过多,不合法!");
}else{
int[]result=check(chs,input);
if(result[1]==chs.length){//对
int score=100*chs.length-10*count;
System.out.println("恭喜你,猜对了!得分为:"+score);
break;
}else{
count++;
System.out.println("猜对的字符数为:"+result[0]+"猜对的字符数为:"+result[1]);//提 //示猜对的字符数,位置对的个数
}
}
}
}
//生成随机字符数组chs(随机字符不能重复)
public static char[] gennerate(){
char[]chs =new char[5];//随机生成的5个字符元素
char[] letters = { '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[letters.length];
int index; //申明一个字符下标
for(int i=0;i<chs.length;i++){//遍历随机字符下标
do{
index=(int)(Math.random()*letters.length);
}while(flags[index]==true);//当下标为true时,表示此下标的字符已经用过,需返回重新给 //字符下标赋值
//当下标为false时,表示此下标的字符没有用过,循环结束,进入下一步
chs[i]=letters[index];//基于下标index的随机性给chs数组随机赋值
flags[index]=true;//经过上一步的调用,此字符已经被用,需将次字符的下标index对应的开 //关更换为true
}
return chs;
}
//对比:随机字符数组chs与用户输入的字符数组input
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[0]++;//字符对的个数
if(i==j){
result[1]++;//位置对的个数
}
break;
}
}
}
return result;
}
}