青松松松松 2022-04-02 22:20 采纳率: 100%
浏览 41
已结题

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

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

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就对位赋值,然后就再进行循环查重,但是目前这里就是遇到了问题,目前尝试了一天了,这个循环都会很乱

我想要达到的结果

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

  • 写回答

2条回答 默认 最新

  • 技术专家团-Bamboo 2022-04-02 23:21
    关注

    输入函数修改下

    //    输入
        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;
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月11日
  • 已采纳回答 4月3日
  • 修改了问题 4月2日
  • 创建了问题 4月2日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改