方法参数

时间:2012-11-01 03:04:28

标签: java

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

我在列出方法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;
            }
    }

5 个答案:

答案 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循环中,并根据您的情况选择continuebreak

答案 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会很乐意忽略它。