1

我正在尝试制作一个非常基本的游戏,您可以使用 do 循环猜测 1-1000 之间的数字。一切正常,除了当我最终做出正确的猜测时,我仍然被提示再做一次猜测,当我再次输入相同的正确猜测时,程序会像预期的那样终止。

为什么我必须做出额外的猜测才能最终让我的程序运行?我是不是循环了额外的时间?另外,如果我猜对了(编译器会说我是对的,然后仍然提示我),然后猜错了(编译器会告诉我我错了),然后再次猜对,程序只会在我第二次猜对了。

底部的第二个 do 循环是我放入 main 方法的内容。上面的一切都在我写的一个叫做 play 的方法中。

public static boolean play()
{

    boolean c;
    int n = 0;

    do {
        String input = JOptionPane.showInputDialog("Enter a number between 1-1000");
        n = Integer.parseInt(input);

        if (n == guess)
        {
            System.out.println("Correct");
            c = true;
        }
        else if (n < guess)
        {
            System.out.println("Not Right");
            c = false;
        }
        else
        {
            System.out.println("Not Right");
            c = false;
        }

        guess++;

    } while (c == false);

    return c;

}

在主要方法中:

    do {
        game1.play();
    } while (game1.play() != true);
4

1 回答 1

2

此循环在循环的每次迭代中运行两次 play 方法:

do {
    game1.play(); // first call
} while (game1.play()!=true); // second call

您没有测试第一次调用返回的值,所以即使它返回 true,您仍然会game1.play()再次调用,这将再次显示“输入 1-1000 之间的数字”。

将其替换为:

boolean done = false;
do {
    done = game1.play();
} while (!done);

这只会play()在循环的每次迭代中调用一次。

也就是说,我不确定你为什么需要外循环。您只需调用一次即可替换 in game1.play(),因为game1.play()将循环直到输入正确的号码。

于 2014-11-12T07:36:03.130 回答