0

我是 Comp Sci 专业的一年级学生,在课堂上我们有一个项目,我们在其中为名为“Bagels”的游戏制作算法。我们要制作一个随机的 3 位数字,但没有一个数字可以是相同的数字。因此,像“100、220、343 和 522”这样的数字将是非法的,因为它们包含具有相同数字的数字。

我决定最好分别生成每个数字,比较每个数字并根据需要进行更改,然后将每个数字添加到字符串中。这是我的代码:

Scanner input = new Scanner(System.in);

    // Generate a random 3 digit number between 102 and 987. The bounds are 102 to 987 because each 
    // digit in the number must be different. The generated number will be called SecretNum and be
    // stored as a String.

    // The First digit is generated between 1 and 9 while the second and third digit are generated 
    // between 0 and 9.

    String SecretNum = "";
    int firstDigit = (int)(Math.random() * 9 + 1);
    int secondDigit = (int)(Math.random() * 10);
    int thirdDigit = (int)(Math.random() * 10);

    // Now the program checks to see if any of the digits share the same value and if one digit shares 
    // the same value then the number is generated repeatedly until the value is different

    // Digit tests are used to determine whether or not any of the digits share the same value.
    boolean firstDigitTest = (firstDigit == secondDigit) || (firstDigit == thirdDigit);

    boolean secondDigitTest = (secondDigit == firstDigit) || (secondDigit == thirdDigit);

    boolean thirdDigitTest = (thirdDigit == firstDigit) || (thirdDigit == secondDigit);

    if (firstDigitTest){
        do{
            firstDigit = (int)(Math.random() * 9 + 1);
        }while (firstDigitTest);

    } else if (secondDigitTest){
        do{
            secondDigit = (int)(Math.random() * 10);
        }while(secondDigitTest);

    } else if (thirdDigitTest){
        do{
            thirdDigit = (int)(Math.random() * 10);
        }while(thirdDigitTest);
    }// end if statements

    // Now the program will place each digit into their respective places
    SecretNum = firstDigit + "" + secondDigit + "" + thirdDigit;

    System.out.println(SecretNum);

(暂时忽略扫描仪;这部分不需要,但我稍后会需要它)

不幸的是,当我测试数字以查看是否有相同的数字时,我有时会陷入无限循环。棘手的部分是,有时它会像无限循环一样运行,但会在我终止程序之前生成数字。所以有时如果它处于无限循环中,我不确定它是否真的处于无限循环中,或者我很不耐烦,但我确定这是一个无限循环问题,因为我等了大约 10 分钟,程序仍在运行。

我真的不知道为什么它会变成一个无限循环,因为如果一个数字与另一个数字匹配,那么这个数字应该不断生成,直到它是一个不同的数字,所以我不明白它是如何变成无限循环的。这是我需要帮助的地方。

(哦,我如何制作字符串不是我将如何保留它。一旦我修复了这个循环,我会改变它,以便将数字附加到字符串中。)

4

1 回答 1

4

问题是(例如)firstDigitTest被设置为一个特定的布尔值,要么trueor false,并且从不改变。即使您设置firstDigit为不同的值,从而解决了firstDigitTest检测到的问题,您也不会重新更新firstDigitTest以检测问题是否仍然存在。所以你的每一个循环,如果它被输入,将无限循环。

我认为您不妨只消除您的布尔变量,然后循环while(firstDigit == secondDigit || firstDigit == thirdDigit || secondDigit == thirdDigit)

于 2013-03-09T20:26:06.570 回答