java 基础-day05

猜字符小游戏:

   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;
        }
}

转载于:https://my.oschina.net/u/3901870/blog/1841020

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值