JAVA之猜数字游戏

java学习 专栏收录该内容
8 篇文章 1 订阅

猜数字游戏的分析:
1.数据结构的分析:
1)char[] chs: 随机生成的字符数组
2)char[] input:用户输入的字符数组
3)int[] result: 对比的结果
4)int score:得分
int count:猜错的次数
2.方法(算法)
1)随机生成字符数组
public static char[] create(){….}
2)主方法:用户输入&&分数的计算
public static void main(String[] args){….}
3)对比:用户输入的和系统随机生成的对比
对比的结果:提示体验者,无限逼近最终结果,给予提示。
字母对和位置对的信息
public static int[] check(char[] chs, char[] input){…}
耦合


import java.util.Scanner;
/**
 * 猜数字游戏
 * 分析:
 * char[] chs:随机生成的字符数组
 * char[] input:用户输入的字符数组
 * int[] result:对比的结果
 * int score:得分
 * int count:猜错的次数
 * (方法)算法:
 * 随机生成字符数组
 * 主方法:用户输入&&分数的计算
 * 对比:用户输入的和系统随机生成的对比
 * 对比的结果:提示体验者,无限逼近最终结果,给予提示
 * 字母对位置对 的信息  
 */
public class GuessGame {
    //用户输入&&分数的计算
        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);
            char[] chs = create();//生成随机数组
            System.out.println(chs);//这里输出随机的字母是用来测试,方便猜对
            int count = 0;
            while(true) {//自作死循环
                System.out.println("猜吧!");
                String str = scan.next().toUpperCase();
                //接收用户输入的字符串,并转换为大写
                if(str.equals("EXIT")) {//判断输入的是否是EXIT
                    System.out.println("下次再来吧");
                    break;
                }
                //去掉字符串两边空格,并将其转换为字符数组
                char[] input = str.trim().toCharArray();
                //进行对比,返回结果,调用对比方法
                int[] result = check(chs,input);
                if(result[0]==chs.length) {//位置对了5个,表明全部猜对
                    int score = 100*chs.length-10*count;
                    System.out.println("你太厉害了,老铁!得分"+score);
                    break;
                }else {//猜錯了
                    count++;//猜错次数+1
                    System.out.println("字符对的个数:"+result[1]
                            +",位置对的个数:"+result[0]);
                }
            }       
        }
     //生成随机字符数组
        public static char[] create() {
            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' }; //字符可选范围数组
            boolean[] flags = new boolean[letters.length];
            //开关数组,默认值为false ,表示字符未存过
            for (int i = 0; i < chs.length; i++) {
                int index;
                do {
                    index = (int) (Math.random()*letters.length);   
                }while(flags[index]==true);
                //当index下标对应的状态为true时,表明该字符已用过
                //此时要再次随机下标,直到为false可用。
                chs[i] = letters[index];
                //基于下标获取字符并赋值给chs中的每一个元素
                flags[index]=true;
                //将下标对应的开头改为true,表明字符已用过
                //循环判断下次字母的开关状态
            }
            return chs;
        }
        //对比,用户输入的和系统随机生成的进行对比
        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 (int j = 0; j < input.length; j++) {
                //遍历用户输入的字符数组
                    if(chs[i]==input[j]) {//字符对
                        result[1]++;//字符对个数+1
                        //位置对的话,字符一定对!
                        if(i==j) {
                            result[0]++;
                        }
                        break;
                    }
                }
            }
            return result;
        }                   
}

结果截图:

这里写图片描述

“`

  • 2
    点赞
  • 1
    评论
  • 4
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值