谓词方法返回重复提示,如果是/否/否则回答无答案

时间:2016-01-06 10:42:21

标签: java while-loop

目前正在关注Erik Roberts所着的“Java的艺术与科学”一书。 当在代码中测试是/否/备用答案时,我问两次没有答案的问题。

Any

以下是输出的屏幕截图。谁能帮我理解为什么? Screenshoted output

2 个答案:

答案 0 :(得分:3)

在此代码中:

if (askYesNoQuestion(prompt) == true) {
    println("Evaluated true.");
}
else if (askYesNoQuestion(prompt) == false) {
    println ("Evaluated false");
}

我们可以看到您正在调用askYesNoQuestion(prompt)两次。每次调用它时,它会询问问题并从用户那里得到另一个响应。

只需拨打一次电话:

if (askYesNoQuestion(prompt) == true) {
    println("Evaluated true.");
} else {
    println("Evaluated false.");
}

如果if条件不匹配,则该方法必须返回false,因此无需再次调用该方法并获得其他结果。

此外,在语句中测试布尔值的常规方法如下:

if (askYesNoQuestion(prompt)) {
    ...

==true部分是多余的。

答案 1 :(得分:3)

这里只是一点点解释,因为我不知道readLine做了什么,但我想它会提示一个问题。

现在让我们检查逻辑。你进入if声明。您执行readLine方法,我假设,输出问题后跟输入。您输入no。现在,您的if条款已发布到false

现在你进入else if部分,你正在做同样的事情(方法askYesNoQuestion再次被执行,这会提示问题并想要输入)。

您可能希望在条件之前执行askYesNoQuestion并将其存储在变量中并在您的条件中检查此变量。

String prompt = "Are you over 18 year old?";
boolean answer = askYesNoQuestion(prompt);
if (answer) { // you can leave out the == true. It´s shorter and has the same meaning.
    println("Evaluated true.");
} else{ // You don´t need an else if here, since the other state of the boolean is false.
    println ("Evaluated false");
}