如何在扫描仪收到输入之前停止显示下一个println?

时间:2013-11-12 17:23:03

标签: java java.util.scanner

我正在构建一个程序,向用户询问有关房屋(数字,街道等)的一些问题,然后我将这些输入分配给字符串和整数。现在我的问题是我想问7/8问题,但我希望只有在用户为上一个问题提供输入后才会出现下一个问题。代码部分如下:

        int choice = sc.nextInt();
        sc.useDelimiter("\\n");

        switch(choice){

        case 1:
            System.out.println("Geef antwoord op onderstaande vragen  en druk op ENTER na elk antwoord: ");
            System.out.println();
            System.out.println("Is de koopwoning TE KOOP of VERKOCHT? Voer een van die twee opties in: ");
            System.out.println("Voer de straatnaam van de woning in: ");
            System.out.println("Voer het huisnummer in: ");
            System.out.println("Voer de postcode in: ");
            System.out.println("Voer de plaats in: ");
            System.out.println("Voer het aantal kamers in: ");
            System.out.println("Voer de vraagprijs/koopprijs in: ");
            System.out.println("Voer het energiepeil in: ");

            String kwstate = sc.next();
            String kwstr = sc.next();
            String kwnr = sc.next(); Integer.parseInt(kwnr);
            String kwpc = sc.next();
            String kwpl = sc.next();
            int kwkamers = sc.nextInt();
            int kwprijs = sc.nextInt();
            String energie = sc.next();

如何使用此代码执行此操作?当我运行它时,它显然会显示所有排队,最重要的是,当我输入时,输入不会出现在问题旁边,而是出现在所有问题之下。 println对此负责,但仅使用print将所有问题放在命令窗口中的一行上。希望我有意义。有什么想法吗?

4 个答案:

答案 0 :(得分:1)

在您要回答的问题之后直接放置每个“扫描”语句,如下所示:

System.out.println("Is de koopwoning TE KOOP of VERKOCHT? Voer een van die twee opties in: ");
String kwstate = sc.next();
System.out.println("Voer de straatnaam van de woning in: ");
String kwstr = sc.next();
System.out.println("Voer het huisnummer in: ");
String kwnr = sc.next(); 
//...

作为旁注,您没有保存Integer.parseInt(kwnr);的结果 如果您不将结果保存为int int kwnrInt = Integer.parseInt(kwnr);值,则结果将会丢失。

答案 1 :(得分:0)

将sc.next放在println语句之后。

System.out.println("Question");
String answer = sc.nextLine();
System.out.println("Second Question");

就像那样。

答案 2 :(得分:0)

然后以Q&A形式执行。

以下代码仅用于显示骨架逻辑:

System.out.print("Provide an integer here: ");
if sc.hasNextInt() {sc.nextInt()}
else {System.out.println("Didn't I tell you to enter integer???");}

答案 3 :(得分:0)

如果你在Windows上,那么这将不起作用:

sc.useDelimiter("\\n");

Windows在每行之间使用两个字符"\\r\\n",从我的测试中看来Scanner会看到"\\r",这会让人感到困惑。这样做效果更好:

sc.useDelimiter("\\r?\\n");

"\\n""\\r\\n"视为分隔符。如果您仍然获得InputMismatchException,则可能会解决该问题。 (可能有更好的方式来表达依赖于系统的换行符。最好不要使用换行符作为分隔符,而是使用sc.nextLine()来处理下一行和当前行上任何未使用的字符,或使用其他一些机制。)