猜数小游戏 数组练习 循环问题

问题遇到的现象和发生背景

JAVA刚刚学习两周,目前进度是一维数组,刚刚讲完方法,学校布置了一道题目

 * 系统自动产生一个4位均不相同的随机数,0可以开头

 * 接收用户输入进行猜测,共7次机会。
 * 输入必须是3或4位数,其中3位数的话默认第一位是0,
 * 并且输入要求每一位均不相同,否则重新输入,并本次
 * 输入不计入猜测次数。

 * 输入满足后,进行比较:
 * 1、数字相同,位置相同记录一个A
 * 2、数字相同,位置不同记录一个B
 * 3、不能重复记录
 *
 * 7次中任意一次猜对,恭喜用户;
 * 7次机会用完,显示正确的答案。
 *
 */

其中遇到一点问题,都和循环相关的

问题相关代码,请勿粘贴截图

目前整体代码

import javax.swing.*;
import java.util.Scanner;

public class numberGame {
    /*/*
     * 系统自动产生一个4位均不相同的随机数,0可以开头

     * 接收用户输入进行猜测,共7次机会。
     * 输入必须是3或4位数,其中3位数的话默认第一位是0,
     * 并且输入要求每一位均不相同,否则重新输入,并本次
     * 输入不计入猜测次数。

     * 输入满足后,进行比较:
     * 1、数字相同,位置相同记录一个A
     * 2、数字相同,位置不同记录一个B
     * 3、不能重复记录
     *
     * 7次中任意一次猜对,恭喜用户;
     * 7次机会用完,显示正确的答案。
     *
     */

    public static void main(String[] args) {
//        欢迎
        welcome();
        char[] suiJI = randomNumber();
//        输入
        int index = 0;
        for (int i = 0; i < 7; i++) {
            index++;
            char[] shuRu = input(index);
            if (verify(suiJI, shuRu).equals("4A0B")) {
                JOptionPane.showMessageDialog(null, "牛皮兄弟!");
                break;
            }
            if (index < 6) {
                JOptionPane.showMessageDialog(null, "错误的哦,本次的匹配度是" + verify(suiJI, shuRu));
            }
            if (index == 6) {
                JOptionPane.showMessageDialog(null, "哦吼,下次加油吧,正确答案是" + suiJI);
                break;
            }

        }

    }

    public static void welcome() {
        JOptionPane.showMessageDialog(null, "马上开始一局精彩刺激的猜数字游戏吧!!!");
    }

    //        产生四位随机数
    public static char[] randomNumber() {
        char[] number = new char[4];
        int index = 0;
        String random = "";
        while (true) {
            int random1 = (int) ((Math.random() * 9) + 0);
            int random2 = (int) ((Math.random() * 9) + 0);
            int random3 = (int) ((Math.random() * 9) + 0);
            int random4 = (int) ((Math.random() * 9) + 0);
            if (random1 != random2 && random3 != random4 && random1 != random3 && random2 != random4) {
                random = random+random1 + random2 + random3 + random4;
                char[] randomNumber = random.toCharArray();
                return randomNumber;
            }
        }
    }

    //    输入
    public static char[] input(int index) {
        char[] inputDigit = new char[4];
        boolean flag = true;
        while (true) {
            String number = JOptionPane.showInputDialog(null, "请输入第" + index + "次机会的数字");
            char[] temp = number.toCharArray();
            if ((temp.length > 4 || temp.length < 3)) {
                JOptionPane.showMessageDialog(null, "位数不对哟");
                continue;
            }
            for (int i = 0; i < inputDigit.length; i++) {
                for (int j = 1; j < inputDigit.length; j++) {
                    if (temp.length == 3) {
                        inputDigit[0] = '0';
                        inputDigit[i + 1] = temp[i];
                    }
                    else if (temp.length==4){
                        inputDigit[i]=temp[i];
                    }
                    if (!(temp[i]!=inputDigit[i]&&temp[j]!=inputDigit[i])){
                        flag=false;
                    }

                }
            }
            if (flag==false){
                JOptionPane.showMessageDialog(null,"不能输入重复的数字哦");
                break;
            }else {
                return inputDigit;

            }

        }


        return null;
    }

    //    校对
    public static String verify(char[] suiJI, char[] shuRu) {

        int identical1 = 0;
        int identical2 = 0;
        for (int i = 0; i < suiJI.length; i++) {
            for (int j = 0; j < randomNumber().length; j++) {
                if (suiJI[i] == shuRu[i]) {
                    identical1++;
                } else if (suiJI[i] == shuRu[j]) {
                    identical2++;
                }
            }
        }

        return identical1 + "A" + identical2 + "B";
    }
}


然后目前主要的问题是输入部分的循环

运行结果及报错内容

问题主要是循环错误百出以及因为循环问题导致后续引用判断的问题

img

我的解答思路和尝试过的方法

我的思路是,先区分开输入3和4以外位数的情况,然后针对3/4位数的情况分别赋值,3位数的情况下,那么和随机数对比的数组的第一位就赋为0,4就对位赋值,然后就再进行循环查重,但是目前这里就是遇到了问题,目前尝试了一天了,这个循环都会很乱

我想要达到的结果

以目前我代码体现出来的已掌握的知识来让循环可以正常进行,可以完成这个题目

输入函数修改下

//    输入
    public static char[] input(int index) {
        char[] inputDigit = new char[4];
        boolean flag = true;
        while (true) {
            String number = JOptionPane.showInputDialog(null, "请输入第" + index + "次机会的数字");
            char[] temp = number.toCharArray();
            if ((temp.length > 4 || temp.length < 3)) {
                JOptionPane.showMessageDialog(null, "位数不对哟");
                continue;
            }

            if(temp.length == 3){
                for(int i=0;i<temp.length;i++){
                    inputDigit[i+1] = temp[i];
                }
                inputDigit[0] = '0';
            }else if(temp.length == 4){
                for (int i = 0; i < temp.length; i++) {
                    inputDigit[i] = temp[i];
                }
            }
            for (int i = 0; i < inputDigit.length; i++) {
                for (int j = i+1; j < inputDigit.length; j++) {
                    if (inputDigit[i]==inputDigit[j]){
                        flag=false;
                    }

                }
            }
            if (flag==false){
                JOptionPane.showMessageDialog(null,"不能输入重复的数字哦");
                break;
            }else {
                return inputDigit;

            }

        }
        return null;
    }
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632