-1

当我运行代码时,我无法输入到扫描仪并以我想要的方式继续浏览代码。有人可以帮我一些建议吗?我已成功导入 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;
}
4

1 回答 1

1

我是否正确使用扫描仪?

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

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

永远不可能false。一个字符串不能同时等于AND"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阅读该课程的 javadocs 。

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

于 2016-06-25T02:08:09.523 回答