1

尝试编写一个程序来询问用户是否需要说明。如果用户输入,控制台可能会响应“请输入是或否答案”并重复该问题。

我很难列出方法 askYesNoQuestion 的方法参数。参数只是字符串是,字符串否?我也被困在如何让程序在有人进入后重复这个问题?我的代码对于我正在尝试做的事情看起来一般正确吗?

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;
            }
    }
4

5 回答 5

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");
         }
    } 
}
于 2012-11-01T03:22:43.303 回答
1

由您决定如何做,但实际上您是在尝试将用户的字符串输入转换为更容易让 Java 使用的东西。

我建议askYesNoQuestion()将问题提出来,然后返回 true 表示是,false 表示否。如果你真的想处理“也许”,那么使用和 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.
// 
于 2012-11-01T03:14:01.543 回答
0

嗯……这里发生了很多事情。不要为此感到难过,但在这种状态下它不会工作 - 编译器会向你抛出很多东西。让我们一步一步来看看。

在我们看语法之前,让我们看一下程序流程。我们想做什么?根据您的描述,您希望完成以下任务:

  • 让用户回答问题以获取说明。
  • 如果他们回答是,则给他们指示并退出。
  • 如果他们回答没有,则退出。
  • 如果他们回答可能,请澄清他们应该只有是或否的答案,然后再问你的问题。

现在,我们可以看看语法来完成这个。一般来说,我们需要一种方法来捕获用户的响应,并使用它来决定下一步要做什么。 readLine()不是您要使用的(因为该方法不存在);你会想要使用Scanner. API 中的文档应该足以让您入门。

接下来,现在我们有了输入,如果用户没有回答是或否,我们需要一种重复的方法。您有一个选择 -while循环或do...while循环都可以。我们必须检查我们的条件是否满足,如果不满足,我们就继续。

第三,字符串“yes”不同于“Yes”和“YeS”和“YEs”。大小写对字符串很重要,因此比较它们的想法是equalsIgnoreCase().

第四,被创建的方法应该只接受一个参数——响应是什么。在你真正开始工作之前,你不知道那会是什么——这是一个if else-if else-if else声明。我认为该方法没有理由自称。

最后,您不要在任何地方调用该方法run!您必须这样做,否则该方法的作用并不重要;只要它在语法上是正确的,如果它从未被调用,Java 会很乐意忽略它。

于 2012-11-01T03:47:04.767 回答
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;
      }
   }
}

所以,当这个方法运行时,它会循环直到用户没有输入“也许”(并希望他们输入是或否)。

于 2012-11-01T03:17:34.993 回答
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"and default),您可以显示消息“输入是或否”。理想情况下,“也许”不是必需的。默认情况下用于处理此问题。

您可以将其包含在一个 do-while 循环中,并根据您的条件,选择continuebreak

于 2012-11-01T03:14:11.877 回答