公牛母牛--------猜数字游戏

1.出数字(由电脑产生4个0-9随机数,且不重复) (双色球)

2.猜数字(用户输入),用户输入存在限制

        1.只能输入一个数字字符串

        2.字符串中的字符不能重复

        3.只能给4个字符(如果字符个数不等于4个,需要请用户重新输入)

        PS:如果用户没有输入正确的话,不会进入比较环节

3.用户猜的数字 和 电脑 出的数字对比。如果数字位置对,值也对,则为A;数字位置不对,值对,则为B。给出结果几A几B ,如果结果不是4A0B,需要用户重新输入,直到4A0B为止

package day08;

import java.util.Scanner;

/**
 * 游戏(公牛和母牛--猜数字游戏)
 */
public class Game {

    public static void main(String[] args) {
        // 1.出数字(由电脑产生4个0-9随机数,且不重复) (双色球) 48-57 随机数
        // 创建数组
        int[] sysNums = new int[4];
        // 遍历数组的同时 放随机数
        // 此时i可以表示什么? 数组元素的下标 计数变量
        for(int i = 0;i < sysNums.length;i++){
            // 生成0-9随机数 放入数组下标为i处
            sysNums[i] = (int)(Math.random() * 10);
            // 去重 i下标的元素,和所有下标小于i的元素做比较,如果重复
            // 重新赋值
            for(int j = 0;j < i;j++){// j 表示 比i小的所有下标
                if(sysNums[i] == sysNums[j]){
                    // 循环回退
                    i--;
                    break;
                }
            }
        }
        System.out.println("电脑产生的数字:");
        for(int i = 0;i < sysNums.length;i++){
            System.out.print(sysNums[i] + " ");
        }



        // 2.猜数字(用户输入)
        // 用户输入存在限制
        /*
            1.只能输入一个数字字符串
            2.字符串中的字符不能重复
            3.只能给4个字符(如果字符个数不等于4个,需要请用户重新输入)
            PS:如果用户没有输入正确的话,不会进入比较环节
         */
        // 输入器
        Scanner input = new Scanner(System.in);

        // 步骤1: 只要用户重新输入一次,输入的校验都需要在完成一次
        // 重复去执行步骤1--循环语句块,
        char[] inputChars;
        while (true){
            // 用户输入
            System.out.println("请输入猜的数字:");
            String inputNum = input.next();
            // 输入信息的校验 保证数据安全
//        1.只能输入一个数字字符串
//        2.字符串中的字符不能重复
//        3.只能给4个字符(如果字符个数不等于4个,需要请用户重新输入)
            // 判断字符个数 如果不为4,请用户重新输入
            inputChars = inputNum.toCharArray();
            // inputChars.length != 4 说明 输入有误,请用户重新输入
            if(inputChars.length != 4){
                System.out.println("用户输入字符不为4");
                continue;
            }
            // 验证用户输入是否为数字字符
            boolean isContinue = false;
            for(int i = 0;i < inputChars.length;i++){
                // 不满足数字字符要求48-57
                if(inputChars[i] < 48 || inputChars[i] > 57){
                    // 输入有误 此时应该让用户重新输入
                    isContinue = true;
                    break;
                }

            }
            if(isContinue){
                System.out.println("输入数据,不为数字字符");
                continue;
            }
            // 判断字符串是否重复 0 0123 1 0123 2 0123
            for(int i = 0;i < inputChars.length;i++){
                for(int j = 0;j < inputChars.length;j++){
                    if(inputChars[i] == inputChars[j] && i != j){
                        isContinue = true;
                        break;
                    }
                }
            }

            if(isContinue == false){
                System.out.println("用户输入的数据 是合法的");
            }else {
                System.out.println("输入数据,数字字符重复");
                continue;
            }


            // 判断 用户输入的信息 和电脑 产生的信息 给出结果
            // 记录A 位置相同且数字相同数的个数
            int countA = 0;
            // 记录B 位置不同  但是数字相同数的个数
            int countB = 0;
            for(int i = 0;i < sysNums.length;i++){ // i 表示系统产生数据的下标
                for(int j = 0;j < inputChars.length;j++){// j 表示用户输入信息的下标
                    if(sysNums[i] == inputChars[j] - 48){// 数字相同 字符对应的数字编码 和 数字的比较
                        if(i == j){// 位置相同
                            countA++;
                        }else{// 位置不同
                            countB++;
                        }
                    }
                }
            }
//        System.out.println(countA + "A" + countB + "B");
            String info = countA + "A" + countB + "B";
            System.out.println(info);
            if(info.equals("4A0B")){
                System.out.println("成功");
                break;
            }else {
                System.out.println("请重新猜数字");
            }

        }


    }

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值