1

所以我正在做作业,这应该是一场牛和牛的游戏。

我生成了 4 个随机整数进行猜测,用户输入一个 4 位数字。然后我验证该数字确实是 4 位数长并将其转换为 CHAR 数组。之后,我想将随机生成的数字与数组中的元素一一进行比较,如果相等,则将“1”添加到计数器中。

我已经尝试了许多我在互联网上找到的类似问题的解决方案,其中一些非常困难的解决方案我没有,因为它们看起来有点矫枉过正,因为我对编程还是很陌生,我觉得好像我错过了一些简单而明显的东西。问题是,每次我遍历数组时,元素都应该匹配,但条件总是“假”。

这是代码的有问题的部分:

    Scanner Sc1 = new Scanner(System.in);
    if(Sc1.hasNextInt()){                            // is it a number ? ?
        int user_guess = Sc1.nextInt();
        String user_guess_string = Integer.toString(user_guess);                  // how.
        int length = user_guess_string.length();                                   // many
        if(length != 4){                                                           //digits
            System.out.println("On vaja 4 numbrid.Mäng hakkab otsast pihta");
        cows_and_bulls();}

        char[] player_number = user_guess_string.toCharArray();  
        char num0 = (char)random1;  //  casting
        char num1 = (char)random2;  //  random numbers
        char num2 = (char)random3;   //  into
        char num3 = (char)random4;    //  chars
        int cows = 0;    // counter of instances where a number guessed by the user is in array
        int bulls = 0;  // counter of instances where a guessed number is in array and correct spot

        for (char element : player_number) {
            if (element == num0) {
                cows = cows + 1;
            }
        }

        System.out.println(cows);
        }

    else{ System.out.println("Not a number. Game will restart");
        cows_and_bulls();}

    }

我也试过这个:

        for (int i = 0; i < 4; i++) {
            char c = Array.getChar(player_number,i);
            if (num0 == c) {
                System.out.println("works");
                break;
            }
        }

我知道我在这方面很糟糕,请帮助。

4

2 回答 2

1

我不确定你从哪里得到random1,random2和from 因为它不是你上面粘贴的逻辑random3random4一部分但是这里的问题是你没有将 '0' 的 ASCII 添加48到上面的值中同时将它们转换为字符.

假设您拥有的所有随机数都是介于 之间的有效数字0 - 9,则以下应该有效。

char num0 = (char)(48 + random1);
char num1 = (char)(48 + random2);
...
...
于 2020-05-10T00:12:12.290 回答
1

数组是错误的char数据结构,让我们摆脱它。添加幻数和强制转换是一种代码味道,IE (char)(48 + random1)

Sc1.nextInt()我们知道输入是一个intif(length != 4)我们知道它有 4 个字符长,我们想要int从中收集。

char[] player_number = user_guess_string.toCharArray()变成:

List<Integer> player_number = Arrays.stream(user_guess_string.split(""))
        .map(Integer::parseInt)
        .collect(Collectors.toList());

现在,char num0-3可以更改为int,我们正在处理我们想要的数据类型。

于 2020-05-10T00:55:40.863 回答