如何让我的程序不要求输入两次?

问题描述 投票:0回答:1

我在 Java 中使用

Scanner
类,我遇到了一个问题,我的程序会执行如下操作:

public static void answer() {
    System.out.print("\t> ");
    command = scan.nextLine(); // It needs to be able to read the full line to be able to capture spaces
}
public static void main(String[] args) {
    while (!command.contains("Hello World!")) {
        System.out.println("Hello!!");
        answer();
    }
}

但是会打印这个:

Hello!!
    > Hello!!
(user input)

因此,经过一番研究,我决定将程序更改为如下所示:

public static void answer() {
    scan.nextLine(); // new piece
    System.out.print("\t> ");
    command = scan.nextLine();
}
public static void main(String[] args) {
    while (!command.contains("Hello World!")) {
        System.out.println("Hello!!");
        answer();
    }
}

这导致了另一个问题。如果用户通过键入“fjbejwkb”而不是“Hello World!”之类的内容搞乱了他们的输入,就会发生这种情况:

Hello!!
    > fjbejwkb (user inputs wrong thing)
Hello!!
(user input)
    > (user input)

如果我去掉添加的

scan.nextLine()
,我就会回到原来的问题“Hello!!”被打印两次,但如果我保留它,每当我在第一次使用后使用
answer()
方法时,它都会强制用户输入两件事。虽然第一个没有读过,但我确信这可能会导致一些我想避免的混乱。

我尝试过使用

println
/
\n
而不是
scan.nextLine()
但这在视觉上对我来说没有吸引力:

Hello!!

    > (user input) 

我也尝试过

command = scan.next()
而不是
command = scan.nextLine()
但这并没有捕获空格 - 对于我正在解决的问题我需要它。

这就是我想要的:

Hello!!
    > fjbejwkb (user inputs wrong thing)
Hello!!
    > (user input)

当用户输入错误时,应该要求输入一次,然后再要求输入。

java java.util.scanner user-input
1个回答
0
投票

只需使用 do-while (而不是

while
):

import java.util.Scanner;

public class HeloWrld {
    private static Scanner  scan = new Scanner(System.in);
    private static String  command;

    public static void answer() {
        System.out.print("\t> ");
        command = scan.nextLine(); // It needs to be able to read the full line to be able to capture spaces
    }

    public static void main(String[] args) {
        do {
            System.out.println("Hello!!");
            answer();
        } while (!command.contains("Hello World!"));
        System.out.println("Good bye.");
    }
}

上述代码示例运行的输出:

Hello!!
    > fjbejwkb
Hello!!
    > Hello World!
Good bye.
© www.soinside.com 2019 - 2024. All rights reserved.