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)

次に、yesまたはnoの応答が返されるまでループします。

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

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

于 2012-11-01T03:14:11.877 に答える
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

ええと...ここではたくさんのことが起こっています。これについては気にしないでください、しかしそれはこの状態では機能しません-コンパイラはあなたにたくさんのものを投げます。それを段階的に見ていきましょう。

構文を見る前に、プログラムフローを見てみましょう。何をしたいですか?あなたの説明から、あなたは以下を達成したいと思います:

  • 指示についての質問にユーザーに回答してもらいます。
  • 彼らが「はい」と答えた場合は、彼らに指示を与えて終了します。
  • 彼らが「いいえ」と答えた場合は、終了します。
  • 彼らが多分答えるなら、彼らはイエスかノーの答えだけを持つべきであることを明確にして、そしてあなたの質問をもう一度してください。

これで、これを実現するための構文を見ることができます。一般に、ユーザーの応答をキャプチャし、それを使用して次に何をするかを決定する方法が必要になります。 readLine()使用するものではありません(そのメソッドが存在しないため)。を使用する必要がありますScanner。APIのドキュメントは、始めるのに十分なはずです。

次に、入力ができたので、ユーザーが「はい」または「いいえ」と答えなかった場合に繰り返す方法が必要です。選択肢があります-whileループまたはループのいずれかdo...whileが機能します。条件が満たされているかどうかを確認する必要があり、満たされていない場合は続行します。

第三に、文字列「yes」は「Yes」および「YeS」および「YEs」とは異なります。文字列では大文字と小文字が重要になるため、文字列を比較するのはになりますequalsIgnoreCase()

第4に、作成されるメソッドは、単一のパラメーター(応答とは何か)のみを取り込む必要があります。実際に作業を行うまで、それがどうなるかはわかりません。これはif else-if else-if elseステートメントです。そのメソッドがそれ自体を呼び出す理由はわかりません。

run最後に、 !のどこにもメソッドを呼び出さないでください。あなたはそれをしなければなりません、さもなければその方法が何をするかは本当に重要ではありません。構文的に正しい限り、Javaは、呼び出されない場合は喜んで無視します。

于 2012-11-01T03:47:04.767 に答える