Java 方法参数
试图编写一个程序,询问用户是否需要指令。如果用户输入,控制台可能会回答“请输入是或否答案”,并重复该问题Java 方法参数,java,Java,试图编写一个程序,询问用户是否需要指令。如果用户输入,控制台可能会回答“请输入是或否答案”,并重复该问题 我很难列出方法askYesNoQuestion的方法参数。参数是否只是字符串yes,字符串no?我还被困在如何让程序在有人进入后重复这个问题上?我的代码对于我要做的事情是否看起来基本正确 import acm.program.*; public class Instructions extends ConsoleProgram{ public void run(){
我很难列出方法askYesNoQuestion的方法参数。参数是否只是字符串yes,字符串no?我还被困在如何让程序在有人进入后重复这个问题上?我的代码对于我要做的事情是否看起来基本正确
import acm.program.*;
public class Instructions extends ConsoleProgram{
public void run(){
String answer = readLine("Would you like instructions? : ")
{
if (answer.equals("maybe")) {
println ("Please enter a yes or no answer.");
}
}
}
private boolean askYesNoQuestion(String yes, String no ){
if (askYesNoQuestoin ("would you like instructions? "))
if (answer.equals("yes")) {
return yes;
} else {
if (answer.equals("no"))
return no;
}
}
这取决于您如何做,但实际上您正在尝试将用户的字符串输入转换为Java更容易使用的内容 我建议
askYesNoQuestion()
先询问问题,然后返回true表示是,返回false表示否。如果您真的想处理“maybe”,那么使用and int(或者更好的是使用枚举)来处理响应
boolean askYesNoQuestion(String question)
{
while(true) {
// print the question
// get the answer
// if answer.equals("yes") return true
// if answer.equals("no") return false
// any other answer asks the question again
}
return false;
}
// call looks like
if (askYesNoQuestion("Do you want instructions?")) {
// do instructions
}
// Do the rest of the app.
//
如果您使用的是Java7,Switch语句现在支持字符串。 我的意思是: 因此,根据您的需求,您可以编写相应的案例。例如,如果用户输入“可能”或“是”或“否”以外的内容(使用
case“maybe”和default
),则可以显示消息“enter yes或no”。理想情况下,不需要“可能”。默认情况用于处理此问题
您可以将其包含在do-while循环中,并根据您的条件选择继续
或中断
我不知道您的readline
方法,但我认为它是有效的。因此,您的run
方法应该是:
public String run(){
while(true) {
String answer = readLine("Would you like instruction?: ");
if (answer.equals("maybe") {
System.out.println("Please enter a yes or no answer");
}
else {
return answer;
}
}
}
因此,当运行此方法时,它将循环,直到用户不键入“maybe”(并希望他们键入yes或no)。首先,传递问题,而不是答案(您还不知道答案;您只知道问题),因此您的方法应该如下所示:
private boolean askYesNoQuestion(String question)
接下来,循环直到您得到肯定或否定的响应:
private boolean askYesNoQuestion(String question) {
println (question);
while (true) {
String answer = // read answer
if (!answer.equalsIgnoreCase("yes") && !answer.equalsIgnoreCase("no")) {
println ("Please enter a yes or no answer.");
} else {
return answer.equalsIgnoreCase("yes");
}
}
}
嗯……这里发生了很多事情。不要为此感到难过,但在这种状态下它不会工作-编译器会向您抛出很多东西。让我们一步一步来看看
在我们看语法之前,让我们先看一下程序流。我们想做什么?根据您的描述,您希望完成以下任务:
- 让用户回答有关说明的问题
- 如果他们回答是,那么给他们指示并退出
- 如果他们回答“否”,则退出
- 如果他们回答“也许”,请澄清他们应该只回答“是”或“否”,然后再次问你的问题
现在,我们可以看看语法来实现这一点。通常,我们需要一种方法来捕获用户的响应,并使用它来决定下一步要做什么readLine()
不是您要使用的方法(因为该方法不存在);你会想用的。API中的文档应该足以让您开始使用
接下来,现在我们有了输入,如果用户没有回答是或否,我们需要一种方法来重复。您可以选择一个while
循环或do…while
循环。我们必须检查我们的条件是否满足,如果不满足,我们继续前进
第三,字符串“yes”不同于“yes”和“yes”以及“yes”。Case与字符串有关,因此比较它们的想法是
第四,创建的方法应该只接受一个参数——响应是什么。你不知道那将是什么,直到你真的在做它-这是一个if-else-if-else
语句。我看不出这个方法有什么理由调用自己
最后,不要在run
中的任何地方调用该方法!你必须这样做,否则这个方法做什么并不重要;只要它的语法正确,如果它从未被调用过,Java就会很高兴地忽略它。注意:“是”和“否”不是布尔值。你需要花很长时间才能返回它们。我认为,比int返回更好的是函数只接受“是”或“否”的答案;不明确的响应可能会触发函数本身打印消息并重试。考虑到函数名为askYesNoQuestion
,我认为更合理的做法是您只能得到一个是/否的答案。OP说的是/否/可能。如果你想让这个方法给你“是/否/可能”的答案,那么布尔值就不行了。我已经调整了伪代码,使其更符合原始问题。如果ConsoleProgram
从Runnable
继承了它的run
方法,更改返回类型并不是一个真正的选项。如果是这样,那么原始方法(void run)是无用的:)是的,整个类有点奇怪。实际上,如果用户需要,我认为它应该输出指令。如果这不是它的工作,那么设计看起来相当混乱。一整堂课只是为了打印一个特定的问题并得到一个肯定/否定的答案?那可能是“也许”?嗯。。。
private boolean askYesNoQuestion(String question) {
println (question);
while (true) {
String answer = // read answer
if (!answer.equalsIgnoreCase("yes") && !answer.equalsIgnoreCase("no")) {
println ("Please enter a yes or no answer.");
} else {
return answer.equalsIgnoreCase("yes");
}
}
}