Java基础 猜字母游戏 代码+详细注释
非常基础的基础知识练习,不涉及类,供新手了解学习。
package 自己新建一个,其他内容可直接复制代码。
import java.util.Scanner;
public class LetterGuessing {
//主方法:
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
char[] chs = generate(); //调用generate方法获得随机字符数组
System.out.println(chs); //作弊
System.out.println("GuessingGame>欢迎尝试猜字母游戏!");
System.out.println("GuessingGame>游戏开始,"
+ "请输入你所猜的5个字母序列:(exit——退出)");
long time1 = System.currentTimeMillis(); //起始时间记录
int count = 0; //猜错次数变量声明
int score = 0; //总分变量声明
while(true) { //自造死循环
String str = scan.nextLine().toUpperCase(); //接受输入的字符串
if(str.equals("EXIT")) {
System.out.println("退出");
break;
}
char[] input = str.toCharArray(); //转化字符串为字符数组
int[] result = check(chs,input); //调用check方法获得判断结果
if(result[0]==5) { //位置全匹配则完全猜对
long time2 = System.currentTimeMillis(); //截止时间
score = 100*chs.length-count*10; //计算分数
System.out.println("猜对了,总分是"+score+",用时"+(time2-time1)+"毫秒");
break; //死循环必须作break,否则无限循环
}else {
count++;
System.out.println("字符正确个数为"+result[1]+",位置正确个数为"+result[0]);
}
}
/*//单元测试2,仅测试一个方法
char[] a = generate();
System.out.println(a);*/
/*//单元测试1,仅测试一个方法
char[] chs = {'A','B','C','D','E'};
char[] input = {'A','C','D','O','P'};
int[] result = check(chs,input);
System.out.println(result[1]+","+result[0]);*/
}
//随机生成字符数组
public static char[] generate() {
char[] chs = new char[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'}; //随机字符组中的各元素,从letters中随机抽取
boolean[] flags = new boolean[letters.length];//new一个标记数组
int index;
for(int i=0;i<chs.length;i++) {
do {
index= (int)(Math.random()*letters.length); //通过抽取随机下标的方式,抽取字符
}while(flags[index]==true); //标记数组为false时,index仅输出一次,如果为true,则表示生成的下标占用。
chs[i]= letters[index];
flags[index] = true; //flags作为开关,占用过的关闭,改为true,while循环中会重生index。
}
return chs;
}
//对比随机字符数组和用户输入的数组
public static int[] check(char[] chs, char[] input) {
int[] result = new int[2]; //result[1]为字符对,result[0]为位置对。
for(int i=0;i<chs.length;i++) { //控制轮,遍历chs中的元素
for(int j=0;j<input.length;j++) { //控制次,遍历input中的元素
if(chs[i]==input[j]) {
result[1]++; //字符匹配则个数增1
if(i==j) { //判断位置
result[0]++; //位置匹配在字符匹配基础上
}
break; //字符匹配到则后面无需再匹配
}
}
}
return result;
}
}