输入后显示输出

3

我写了一个程序,要求用户输入一个数字,然后检查它是否等于、小于或大于一个随机数。这是一个简单的猜数字游戏。程序完美地运行,但我想把输出显示在与输入相同的一行,但我不知道该如何实现。

Ok, I've picked a number between 1 and 100. What is your first guess?
Guess 1: 36
<
Guess 2: 50
>
Guess 3: 46
That is correct. The hidden number is 46.

这是我想要的样子:
Guess 1: 36 <
Guess 2: 50 >
Guess 3: 46 That is correct. The hidden number is 46.

我该如何实现呢?当我使用Scanner.nextInt();时,输入后光标会向下移动。

这是我的当前代码:

while (!isCorrect) {
        System.out.print("Guess " + guessCount + ":  ");
        currentGuess = input.nextInt();

        if (currentGuess == randomNumber) {
            isCorrect = true;
            System.out.println("That is correct. The hidden number was " + randomNumber);
        }
        else if (currentGuess > randomNumber) {
            System.out.println(" >");
            ++guessCount;
        }
        else if (currentGuess < randomNumber) {
            System.out.println(" <");
            ++guessCount;
        }

    }
3个回答

0

你能够达到的最好效果就是将输入内容重复输出。

while (!isCorrect) {
    System.out.print("Guess " + guessCount + ":  ");
    currentGuess = input.nextInt();

    if (currentGuess == randomNumber) {
        isCorrect = true;
        System.out.println("That is correct. The hidden number was " + randomNumber);
    }
    else if (currentGuess > randomNumber) {
        System.out.println(currentGuess  + " >");
        ++guessCount;
    }
    else if (currentGuess < randomNumber) {
        System.out.println(currentGuess  + " <");
        ++guessCount;
    }

}

输出结果为:

猜测 1:36 
36 <
猜测 2:50
50 >
猜测 3:46 
回答正确。隐藏数字为 46。

是的,它看起来比以前好了一点。 - user2676449

0
如果你真的需要像那样格式化你的输出,你可以尝试将输入保存到一个ArrayList中,清除屏幕,然后再次将所有先前的输入打印到屏幕上。
List<Integer> foo = new ArrayList<Integer>();

while (!isCorrect) {
    System.out.print("Guess " + guessCount + ": ");
    guessCount++;
    currentGuess = input.nextInt();
    foo.add(currentGuess);
    for(int a = 0; a < 50; a++) {
        System.out.println('\n');
    }
    for(int i = 0; i < foo.size(); i++) {
        currentGuess = foo.get(i);
        System.out.print("Guess " + (i+1) + ": " + currentGuess);
        if (currentGuess == randomNumber) {
            isCorrect = true;
            System.out.println(" That is correct. The hidden number was " + randomNumber);
        }
        else if (currentGuess > randomNumber) {
            System.out.println(" >");
            }
        else if (currentGuess < randomNumber) {
            System.out.println(" <");
        }
    }
}

为了清空屏幕,我只需要输出 50 行空白。
这里提供了一个清空控制台的解决方案:Java:清空控制台。然而,它对我和 Chris 都没有起作用。

Runtime.getRuntime().exec("cls"); 在所有的Windows系统上都不起作用。我的Windows 7 x64系统完全忽略了它。 - Chris Bode
没错,我也在 Windows 8 x64 上尝试了一下,结果出现了一些错误。我在这里找到了解决方法:https://dev59.com/1XA85IYBdhLWcg3wBOzh - Eric Lee
这似乎是我问题的最佳解决方案。清理控制台对我也没有起作用。 - user2676449

0

这并不总是可行的。你可以尝试回显一个 \b 退格字符,但那可能不起作用。一旦用户输入了新行,就没有办法将其删除。


虽然它没有起作用,但感谢您确认了我的担忧 :)。我想我必须设法规避它。 - user2676449

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接