* 程序随机生成5个字母让玩家猜
* 字母和位置必须都对
* 猜错 提醒玩家猜对了几个字母、其中位置对了几个
* 一共500分,猜错一次扣10分;
package day07;
import java.util.Scanner;
/**
* 猜字母游戏
* 程序随机生成5个字母让玩家猜
* 字母和位置必须都对
* 猜错 提醒玩家猜对了几个字母、其中位置对了几个
* 一共500分,猜错一次扣10分;
* @author lixing
*/
public class GameGuessLetter {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
char[] cha = randomLetter();
for(int i=0;i<cha.length;i++){
System.out.print(cha[i]);
}
System.out.println();
System.out.println("随机字母已生成");
/*
* 玩家输入字母
*/
int score = 500;
int count=0;
do{
System.out.println("猜吧!");
String userStr = scan.next();
char[] user = new char[5];//拆分玩家输入的字符串存入数组
for(int i=0;i<user.length;i++){
user[i] = userStr.charAt(i);
}
count = judge(user,cha);//位置对的
if(count!=5){
score -=10;
int count2=judgeL(user,cha);//猜对的
System.out.println("猜对了"+count2+"个字母,其中有"+count+"个位置是正确的");
}
}while(count!=5);
System.out.println("恭喜你猜对了!得分"+score);
}
/**
* 生成随机字符
* @return
*/
public static char[] randomLetter(){
char[] cha = new char[5];
for(int i=0;i<cha.length;i++){
int temp = 0;
while(temp<65||temp>90){
temp = (int)(Math.random()*100);
}
cha[i] = (char)temp;
}
return cha;
}
/*
* 判断位置对的有几个
*/
public static int judge(char[] user,char[] cha){
int count=0;//累加位置对应的
for(int i=0;i<cha.length;i++){
if(user[i]==cha[i]){
count++;
}
}
return count;
}
/*
* 判断对了几个字母
*/
public static int judgeL(char[] user,char[] cha){
int count2=0;
for(int i=0;i<cha.length;i++){
for(int j=0;j<user.length;j++){
if(user[j]==cha[i]){
count2++;
user[j]='0';
break;
}
}
}
return count2;
}
}
前面是每听自己写的有点乱,字符有可能生成重复的
下面是老师教的方法:
排除了字符重复的方法
package day07;
import java.util.Scanner;
public class Guessing2 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
char[] chs = generate(3);//生成随机字符数组
System.out.println(chs);
int score = chs.length*100;//总分
while(true){
System.out.println("猜吧!");
String str = scan.nextLine().toUpperCase();//获取输入的字符串并转换为大写
if("EXIT".equals(str)){//退出命令
System.out.println("再见");
break;
}
char[] input = str.toCharArray();//将字符串转换为字符数组
int[] result = check(chs,input);//获取对比后的结果
if(result[0]==chs.length){//
System.out.println("恭喜你猜对了,得分:"+score);
break;
}else{
System.out.println("猜对了"+result[1]+"个字母,其中位置对的有"+result[0]+"个");
score -= 10;//答错一次减10分
}
}
}
/*
* 生成随机字符数组
*/
public static char[] generate(int n){
char[] chs = new char[n];//定义随机数组
char[] letter = {'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[letter.length];//对应每个字符,默认false
for(int i=0;i<chs.length;){
int index = (int)(Math.random()*letter.length);//生成0-25之间的整数
if(flags[index]==false){//判断是否重复
chs[i] = letter[index];
flags[index] = true;
i++;//不重复则进入下一轮循环
}
}
return chs;
}
/*
* 判断 对比
*/
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[1] ++;//字符对的个数
if(i == j){
result[0] ++;//位置对的个数
}
break;
}
}
}
return result;
}
}