Java 谓词方法yes/no/maybe响应
我试图编写一个程序,其中run方法调用一个谓词方法,询问某人“今晚想去看电影吗?”。如果用户对问题输入“是”,我希望程序说“好的,我们今晚走。”如果用户输入“否”,我希望程序打印“太酷了,下周走”。但是如果用户输入“也许”我希望程序说“这是一个是或否的问题”,然后再次问问题“你今晚想去看电影吗?”然后等待用户再次输入响应Java 谓词方法yes/no/maybe响应,java,Java,我试图编写一个程序,其中run方法调用一个谓词方法,询问某人“今晚想去看电影吗?”。如果用户对问题输入“是”,我希望程序说“好的,我们今晚走。”如果用户输入“否”,我希望程序打印“太酷了,下周走”。但是如果用户输入“也许”我希望程序说“这是一个是或否的问题”,然后再次问问题“你今晚想去看电影吗?”然后等待用户再次输入响应我遇到的问题是,如果用户输入“可能”,程序会说“这是一个肯定或否定的问题”,然后自动打印“那很好,下周就走。”我该如何修复程序中的错误逻辑?这是我书中关于参数传递的章节中的一个问
我遇到的问题是,如果用户输入“可能”,程序会说“这是一个肯定或否定的问题”,然后自动打印“那很好,下周就走。”我该如何修复程序中的错误逻辑?这是我书中关于参数传递的章节中的一个问题。我是否正确地设计了我的程序,将字符串值从run方法传递到isYesorNo方法,以实现我试图编写的内容
import acm.program.*;
public class MoviesTonight extends ConsoleProgram {
public void run() {
String answer = readLine("do you want to go to a movie tonight?");
if (isYesorNo(answer)) {
println("Ok. Let's go tonight");
} else
println("that's cool let's go next week");
}
private boolean isYesorNo(String response) {
while (!response.equals("yes") && !response.equals("no")) {
println("it's a yes or no question");
break;
}
return (response.equals("yes"));
}
}
这里有两件事:
“可能”
,那么您的是是或否
将打印出“这是一个是或不是的问题”
,但随后返回false
,这将提供额外的(有问题的)输出“太酷了,我们下周去吧”
中断
没有意义,这才是真正的问题。除非满足条件,否则循环应该继续,它应该在第一次执行循环时中断“可能”
,那么您的是是或否
将打印出“这是一个是或不是的问题”
,但随后返回假
,这将提供额外的(有问题的)输出“太酷了,我们下周去吧”
中断
没有意义,这才是真正的问题。循环应该继续,除非条件满足,否则它应该在循环的第一次执行时中断如果您想要的不是真/假,而是一组离散的值,我将使用枚举返回答案 例如:
enum Answer {
YES,
NO,
MAYBE
}
然后打开枚举而不是if/else(根据个人偏好,我认为switch语句更简洁),将所有内容放入while循环:
boolean yesOrNo = false;
while (!yesOrNo) {
Answer answer = readAnswer("do you want to go to a movie tonight?");
switch (answer) {
case ANSWER.YES:
println("Ok. Let's go tonight");
yesOrNo = true;
break;
case ANSWER.NO:
println("that's cool let's go next week");
yesOrNo = true;
break;
default:
println("it's a yes or no question");
break;
}
}
因此,基本上,如果答案是MAYBE,yesOrNo
没有设置为true,那么当检查条件时,while循环将再次执行
readAnswer
方法应该是一个私有静态助手方法,并根据输入字符串返回正确的枚举值。通过在字符串上使用if/else或switch语句来实现这一点。如果您想要的不是真/假,而是一组离散的值,我将使用枚举返回答案
例如:
enum Answer {
YES,
NO,
MAYBE
}
然后打开枚举而不是if/else(根据个人偏好,我认为switch语句更简洁),将所有内容放入while循环:
boolean yesOrNo = false;
while (!yesOrNo) {
Answer answer = readAnswer("do you want to go to a movie tonight?");
switch (answer) {
case ANSWER.YES:
println("Ok. Let's go tonight");
yesOrNo = true;
break;
case ANSWER.NO:
println("that's cool let's go next week");
yesOrNo = true;
break;
default:
println("it's a yes or no question");
break;
}
}
因此,基本上,如果答案是MAYBE,yesOrNo
没有设置为true,那么当检查条件时,while循环将再次执行
readAnswer
方法应该是一个私有静态助手方法,并根据输入字符串返回正确的枚举值。通过在字符串上使用if/else或switch语句来执行此操作。除了已经提供的建议外,isYesOrNo
方法包含一个重大错误,这实际上是基本问题的答案:
我遇到的问题是,如果用户输入“可能”,程序会说“这是一个肯定或否定的问题”,然后自动打印“那很好,我们下周走。”我如何修复程序中的错误逻辑
如果响应为“可能”,则不等于“是”,返回值将为false
——这就是为什么它会立即打印“太酷了,我们下周去吧”。这实际上就是您为if(isYesOrNo(answer))
提供的“else”条件
目前,您正在检查响应是否为yes/no,启动while
循环(如果不是yes/no,则运行该循环),过早地中断while
循环,然后在首先产生while
循环的条件之一上返回false
(读取:not'yes'),最终被处理为“否”(情况可能并非如此)
如果要使用if-else,请尝试以下操作:
public void askQuestion(){
String response = readline("Do you want to go to a movie tonight?");
getYesNoResponse(response);
}
public void getYesNoResponse(String answer){
if (answer.equals("yes"){
//print the yes response
} else if (answer.equals("no") {
//print the no response
} else {
askQuestion();
}
}
除了已经提供的建议外,
isYesOrNo
方法还包含一个重大错误,这实际上是基本问题的答案:
我遇到的问题是,如果用户输入“可能”,程序会说“这是一个肯定或否定的问题”,然后自动打印“那很好,我们下周走。”我如何修复程序中的错误逻辑
如果响应为“可能”,则不等于“是”,返回值将为false
——这就是为什么它会立即打印“太酷了,我们下周去吧”。这实际上就是您为if(isYesOrNo(answer))
提供的“else”条件
目前,您正在检查响应是否为yes/no,启动while
循环(如果不是yes/no,则运行该循环),过早地中断while
循环,然后在首先产生while
循环的条件之一上返回false
(读取:not'yes'),最终被处理为“否”(情况可能并非如此)
如果要使用if-else,请尝试以下操作:
public void askQuestion(){
String response = readline("Do you want to go to a movie tonight?");
getYesNoResponse(response);
}
public void getYesNoResponse(String answer){
if (answer.equals("yes"){
//print the yes response
} else if (answer.equals("no") {
//print the no response
} else {
askQuestion();
}
}
如果我不使用break,程序将持续打印“这是一个是或否的问题”,并且不会停止。是的,因为您没有得到新的输入。您应该添加另一行以从
readLine
获取新的输入。在isYesorNo方法或run方法中添加另一行输入?它应该位于isYesorNo
方法的循环中,但是是的,它是