当我 运行 这段代码时,它不允许我输入我的扫描仪。我是否正确使用扫描仪?

When I run this code it is not allowing me to input to my scanner. Am I using the Scanner properly?

当我 运行 代码时,我无法将代码输入扫描仪并继续按我想要的方式输入代码。有人可以帮我一些建议吗?我已成功导入 java.util.Scanner。顺便说一句,我确实调用了原始程序中的方法,我只是在发布问题之前将其删除。我正在使用 BlueJ。

public class Instructions extends ConsoleProgram
{
public boolean question(String prompt) {
    Scanner s = new Scanner(System.in);  
    println(prompt);
    String str = s.next();
    boolean result = true;
    while(!(str.equals("yes") || str.equals("no"))) {
        str = s.next();
        println("enter yes or no");
        }
    if (str.equals("yes")) {
    result = true;
    } else if (str.equals("no")) {
    result = false;
    }
    return result;
}

Am I using the Scanner properly?

这不是问题所在。真正的问题是应用程序逻辑中的直接错误。这个条件:

  !(str.equals("yes") && str.equals("no"))

永远不会是false。一个字符串不能同时等于 "yes""no" 。因此,您的 while 循环无法终止。


更新

编辑后,您的代码应该或多或少可以工作。但这不太对。

while(!(str.equals("yes") || str.equals("no"))) {
    str = s.next();
    println("enter yes or no");
}

1) 在提示输入之前,您正在阅读下一个输入标记。

2) 您没有使用用户刚刚输入的行的第一个标记之后的剩余字符。

这样更好

while(!(str.equals("yes") || str.equals("no"))) {
    s.nextLine();
    println("enter yes or no");
    str = s.next();
}

我建议你回去仔细阅读 Scanner class .

的 javadoc

也有可能new Scanner(System.in)是错误的。这通常是正确的做法,但您的要求 可能 需要您从其他输入流读取使用输入。