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");
         }
    } 
}