目前正在关注Erik Roberts所着的“Java的艺术与科学”一书。 当在代码中测试是/否/备用答案时,我问两次没有答案的问题。
Any
以下是输出的屏幕截图。谁能帮我理解为什么? Screenshoted output
答案 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");
}