Java 用户输入在同一行?

Java 用户输入在同一行?,java,Java,我是Java新手,请原谅我。我正在写一个小小的猜谜游戏程序 导入java.util.Scanner 公开课猜谜游戏{ static Scanner userInput = new Scanner(System.in); public static void main(String[] args) { int menuOption; // Main Screen // System.out.println("Guessing Game"); System.out

我是Java新手,请原谅我。我正在写一个小小的猜谜游戏程序

导入java.util.Scanner

公开课猜谜游戏{

static Scanner userInput = new Scanner(System.in);

public static void main(String[] args) {
    int menuOption; 
    // Main Screen //
    System.out.println("Guessing Game");
    System.out.println("---------------------");
    System.out.println("1.) Play Game");
    System.out.println("2). Exit");
    System.out.println();           

    while (true) {
        System.out.print("Please select a menu option: ");                  
        menuOption = userInput.nextInt();

        if (menuOption == 2) {
            System.out.println("Exiting the game. Thanks for playing!");
            break; 

        } else if (menuOption == 1) {
            System.out.println("Let's start the game!");

            getRandomRange();

        } else {
                System.out.println("Sorry, that's not a valid option. Please try again.");
                continue;
        }
    }

}
/**
 * Determine the range of numbers to work with
 */
public static void getRandomRange() {
    int min;
    int max;

    System.out.print("Choose a minimum number: ");
    min = userInput.nextInt();

    System.out.print("Choose a maximum value: ");
    max = userInput.nextInt();

    getRandomNumber(min, max);
}

public static void getRandomNumber(int min, int max) {
    int randomNumber = (int) (Math.random() * (max - min + 1)) + min;

    getAGuess(min, max, randomNumber);
}

public static void getAGuess(int min, int max, int randomNumber) {
    int guess; 

    while (true) {
        System.out.print("Guess a number between " + min + " and " + (max) + ": ");
        guess = userInput.nextInt();

        if (guess == randomNumber) {
            System.out.println("Correct! The random number is: " + randomNumber);
            break;
        }
    }   
  }
}
当我提示用户猜测一个数字并且该数字不正确时,我希望能够立即刷新输入流并在同一行上输入另一个猜测

例如: 猜测一个介于0和5之间的数字:我只在这一行输入我的猜测

我可以将打印从循环中取出,但在这种情况下,如果我输入一个inccorect编号,光标将跳到下一行


希望这有意义。谢谢!

如果您的目标只是清除控制台,那么您可以执行以下操作:

Runtime.getRuntime().exec("cls");
或者,如果您在Linux或OS X上:

Runtime.getRuntime().exec("clear");
现在,如果您添加要保留的前一行,则需要将其保留在数组中,并在每次清除后重新打印

这在IDE中不起作用


如果您想要更独立于系统的方式,有一个名为
JLine
()的库,它是为更好地使用控制台而设计的。它实际上包含一个方法
clearScreen


你也可以这样做:

System.out.print("\033[H\033[2J");

这将清除屏幕并将光标返回到第一行。

快速而肮脏的解决方案

public class Main {


    public static final void main(String[] data) {

        Scanner userInput = new Scanner(System.in);
        int min = 0;
        int max = 10;
        int randomNumber = (int) ((Math.random() * max) + (min + 1));

        while (true) {
            System.out.print("Guess a number between " + min + " and " + max + ": ");
            int guess = userInput.nextInt();
            if (guess == randomNumber) {
                System.out.println("Correct! The random number is: " + randomNumber);
                break;
            } else {
                for (int i = 0 ; i < 25; i++) {
                    System.out.println();
                }
            }
        } 
    }
}
公共类主{
公共静态最终void main(字符串[]数据){
扫描仪用户输入=新扫描仪(System.in);
int min=0;
int max=10;
int randomNumber=(int)((Math.random()*max)+(min+1));
while(true){
系统输出打印(“猜测一个介于“+min+”和“+max+”之间的数字:”;
int guess=userInput.nextInt();
如果(猜测==随机数){
System.out.println(“正确!随机数为:“+randomNumber”);
打破
}否则{
对于(int i=0;i<25;i++){
System.out.println();
}
}
} 
}
}

如果不修改控制台,我认为这是不可能的,但如果可能的话,我很确定解决方案不是跨平台的。我不确定我是否理解您试图实现的目标。您能否添加一个示例,说明您希望输出的样子?是否是:猜一个介于2和8之间的数字:2 3 4 5正确!随机数is:5可能重复的@mmdeas是这样的。猜一个介于2和8之间的数字:[猜这里]所以第一个猜测是2。它是不正确的,并且被清除了,所以我之前输入2的地方不存在了,我可以输入3…等等,直到答案是正确的。都在同一行。我明白了。我同意@coldawd的说法,没有好的方法可以做到这一点。在用户按下return(afaik)之前,你无法获得输入无法删除换行符。清除屏幕(使用外部命令或大量新行)并重新打印提示是一个解决办法。编辑:正如我刚才看到Joe的回答所建议的。这是哈哈的翻版,很高兴你学到了一些东西!我刚刚尝试了:Runtime.getRuntime().exec(“cls”);但出现了一个IO异常错误。除了这一行代码之外还有其他内容吗?谢谢大家。什么是异常?您的操作系统是什么?Windows 7。线程“main”java.lang中的异常。错误:未解决的编译问题:未处理的异常类型IOException at GuessingGame.GetAgess(GuessingGame.java:73)在GuessingGame.getRandomNumber(GuessingGame.java:63)在GuessingGame.getRandomRange(GuessingGame.java:57)在GuessingGame.main(GuessingGame.java:37)我刚刚捕获到异常,但它仍然移动nextInt()光标移到下一行。@jmin91你能发布更多的代码吗?我可以自己调试吗?如果没有代码,很难说GuessingGame发生了什么。谢谢Joe-这会清除屏幕,但我希望在屏幕上保留“猜一个介于…之间的数字”输出,但只需清除该行输入。谢谢。