Java阶段小项目:猜字符游戏终极版本

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;

}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值