尝试编写一个程序,询问用户是否需要说明。如果用户输入可能控制台响应“请输入是或否答案”并重复该问题。
我在列出方法askYesNoQuestion的方法参数时遇到了困难。参数只是String yes,String 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;
}
}
答案 0 :(得分:1)
由您决定如何操作,但实际上您正在尝试将用户的字符串输入转换为更容易让Java使用的东西。
我建议askYesNoQuestion()
会问这个问题,然后返回true表示是,错误表示否定。如果你真的想处理“可能”,那么使用和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.
//
答案 1 :(得分:1)
首先,传递问题,而不是答案(你还不知道答案;你只知道问题),所以你的方法应该是这样的:
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");
}
}
}
答案 2 :(得分:0)
如果您使用的是Java 7,则Switch语句现在支持字符串。 我的意思是:
switch(inputString){
case "yes": /*do something */ break;
case "no": /*do something */ break;
case "maybe": /*do something */ break;
default: /*do something */ break;
}
因此,根据您的要求,您可以编写相应的案例。例如,如果用户输入“可能”或“是”或“否”以外的其他内容(使用case "maybe"
和default
),则可以显示消息“输入是或否”。理想情况下,“可能”不是必需的。默认情况用于处理此问题。
您可以将其封装在do-while循环中,并根据您的情况选择continue
或break
答案 3 :(得分:0)
我不知道你的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)。
答案 4 :(得分:0)
嗯......这里有很多事情要发生。不要为此感到难过,但它在这种状态下不起作用 - 编译器会向你抛出很多东西。让我们一步一步地看一下。
在我们看一下语法之前,让我们来看看程序流程。我们想做什么?根据您的描述,您希望完成以下任务:
现在,我们可以看一下语法来实现这一目标。通常,我们需要一种方法来捕获用户的响应,并使用它来决定下一步该做什么。 readLine()
不是您要使用的(因为该方法不存在);你会想要使用Scanner
。 API中的文档应足以让您入门。
接下来,既然我们有了输入,我们需要一种方法来重复,如果用户没有回答是或否。您可以选择 - while
循环或do...while
循环可以正常工作。我们必须检查我们的状况是否得到满足,如果不满足,我们继续前进。
第三,字符串“是”不同于“是”和“YeS”和“YE”。案例与字符串有关,因此比较它们的想法是equalsIgnoreCase()
。
第四,创建的方法应该只接受一个参数 - 响应是什么。在你真正开始工作之前,你不知道它会是什么 - 这是一个if else-if else-if else
语句。我认为没有理由让这种方法自称。
最后,你不要在run
的任何地方调用该方法!你必须这样做,否则这个方法的作用并不重要;只要它在语法上是正确的,如果它从未被调用过,Java会很乐意忽略它。