2016-12-07 5 views
-1

私の推測ゲームは、ユーザーからの推測を​​5,10、または20回受け取り、コンピュータによって選択された乱数を推測しようとしています。私のコード内のすべては、コードがユーザーに5,10、または20の推測を要求するかどうかを尋ねるときに、ユーザーがオプションの1つではない15を入力すると、彼らの推測を​​求める。私は彼らがオプションの1つを入力することを確認するいくつかのタイプのバリデーションが必要です。私はプログラミングに慣れていないので、どこにどのように正しい方法でこれを含めるかわかりません。私はいくつかの異なる方法を試しましたが、すべての人にエラーが発生します。私が必要とするのは、ユーザーがオプションの1つではない番号を入力した場合、それらのオプションの1つを入力するまで、再度要求するだけです。誰かが私にこのことをどうやってやるべきかを教えてくれますかjavaでユーザー入力を検証していますか?

+0

この質問を改善するには、試した方法の1つまたは2つとエラーを表示する必要があります。このサイトが意図しているものではないので、誰かにあなたにコードを渡す可能性は低いです。 – Lexi

+0

あなたは何を試しましたか、そうしたときにどんなエラーがありましたか? – RamPrakash

答えて

0

は、ループ内のユーザからの入力を取るようにあなたが何かを行うことができます。例:

System.out.print("How many guesses would you like? (5, 10, 20)"); 
do { 
    int numberOfGuesses = scan.nextInt(); 
    //on correct guess, break out of the loop 
    if(numberOfGuesses == 5 || numberOfGuesses == 10 || numberOfGuesses == 20) 
     break; 
System.out.print("Please enter a guess having one of these values (5, 10, 20)"); 
} while (true); 

ユーザが3つの値のいずれかを入力しない限り、正しい推測値を入力するように求められます。

+0

*同じ*正確な質問のプロンプトはあまりユーザーフレンドリーではありません。ユーザーに*無効*オプションを選択したことを知らせるのがより理にかなっています。 – Idos

+0

@Idos私の答えを更新します。 – yogur

2

まずはif (answer.length() ==3)は意味がありません。 はたぶん、あなたは意味:

if(answer.equals("yes")) 

を加えて、あなたは私が有効な推測番号を含むSetを使用したいものを達成するために。 if句で複数の値をチェックするよりもスケーラビリティがあり、はるかに理にかなっています。

Set<Integer> validNumberOfGuesses = new HashSet<Integer>(Arrays.asList(5, 10, 20)); 
int numberOfGuesses = scan.nextInt(); 
while (!validNumberOfGuesses.contains(numberOfGuesses)) { 
    /* ask again */ 
    System.out.println(numberOfGuesses + " is not a valid number of guesses, please try again"); 
    numberOfGuesses = scan.nextInt(); 
} 
0

Javaが実行したときの電流ループの先頭にジャンプcontinueキーワードがあります。それは次のようになります。ドキュメントThe Continue Statementを参照してください。

あなたはユーザー入力をしたら

if (numberOfGuesses != 5 && numberOfGuesses != 10 && numberOfGuesses != 20) { 
    continue; // jumps to start of while loop block, without running conditional 
} 
0

「numberOfGuesses」を受け取ったら、移動する前にその番号の値を確認する必要があります。それ以外の場合は、実際に番号を検証しないため、コード内を移動するだけです。

ブール値を返す関数を作成してそこの数値を確認するとよいでしょう。あなたには、いくつかの比較と検証を実行したい機能に

boolean isValidOption(int number)

。あなたは3つのオプションを持っているので、あなたは多くの方法があるとして、あなたが値を確認しましょう方法を検討することができます

if (number == 5 || ...)

のようなものを選ぶことができます。あなたが望むことが分かっている有効な数値と比較するだけで、ifステートメントを実行したり、数値を配列に配置したり、配列を繰り返し処理している間に値を比較したりすることができます。あなたが始まり、幸せなコーディングに役立つことを願っています!

編集:最後に言及しておきたいことがありますが、コードの流れを考慮する必要があります。あなたのチェックのためのsomesortのループはwhile(!isValidOption())のようにする必要があります。ユーザーが有効なオプションを入力するまで、指示を繰り返します。ここでコードの操作の順序を考え、コンピュータがあなたのために考えていないことを理解する必要があります。それはあなたが言うことをするので、あなたがここでそれを伝えようとしていることを理解する。例えば、I want to step into my game, if and only if, the condition of isValidOption is met

0

何をする必要がある、あなたが確認するためにあなたがループ内のコードを書くことができます

private int getNumberOfGuesses(Scanner scan) { 
     int numberOfGuesses; 
     boolean numberOfGuesesIsValid; 
     do { 
      System.out.println("How many guesses would you like? (5, 10, 20)"); 
      numberOfGuesses = scan.nextInt(); 
      numberOfGuesesIsValid = numberOfGuesses == 5 || numberOfGuesses == 10 || numberOfGuesses == 20; 

     if (!numberOfGuesesIsValid) { 
      System.out.print("Wrong option !!!"); 
     } 
     } while (!numberOfGuesesIsValid); 
    return numberOfGuesses; 
} 
0

次の関数を使用することができますたとえば、あなたの要求を満たす入力を取得するまでループ内で滞在することです値はどちらかである5,10または20

while(numberOfGuesses!=5||numberOfGuesses!=10||numberOfGuesses=!20);

と条件if(answer.length()==3は、エラーを引き起こす可能性があります。入力が長さ3の場合、つまり「noo」でも毎回動作することを意味します。

関連する問題