0

私は一連のサイコロを持っており、それぞれについて、ユーザーがそれをリロールするかどうかを尋ねる必要があります。最も簡単な方法は、Scannerクラスを使用したプロンプトのようです。私は、それらが何を入力して適切に処理するかを確認します。ただし、要求されたデータがユーザー入力に存在しない場合、scanner.next()は例外をスローします。したがって、scanner.hasnext()はどういうわけかここに収まる必要があります。

これは私が持っているコードです。エントリを応答配列に入力しますが、ユーザー入力にYもNも含まれていない場合は例外をスローします。

public Boolean[] chooseDice(int diceNum){
    Boolean[] responses = new Boolean[diceNum];
    Scanner scansworth = new Scanner(System.in);
    for (int i=0; i<diceNum; i++){
        System.out.printf("Reroll this die? (%d)\n",i);
                responses[i] = (scansworth.next("[YN]")) == "Y" ? true : false;
    }
        return responses;

scansworth.hasNext( "[YN]")を呼び出して、インタープリターがロックせず、ループの各ステップの後にエントリを正しくチェックするようにするにはどうすればよいですか?

4

2 に答える 2

1

ユーザー入力を読み取るコードをしばらく囲んで、ユーザー入力が特定のパターンであるかどうかを確認できます。...を使用しhasNext("[YN]")ます。また、..を使用する必要はありません。..を使用scanner.next([YN])するだけnext()です。 、「Y」と比較できます。

 for (int i=0; i<diceNum; i++){
           int count = 0;
           System.out.printf("Reroll this die? (%d)\n",i);

           // Give three chances to user for correct input.. 
           // Else fill this array element with false value..

           while (count < 3 && !scansworth.hasNext("[YN]")) {
               count += 1;  // IF you don't want to get into an infinite loop
               scansworth.next();
           }    

           if (count != 3) {
                /** User has entered valid input.. check it for Y, or N **/
                responses[i] = (scansworth.next()).equals("Y") ? true : false;
           } 
           // If User hasn't entered valid input.. then it will not go in the if  
           // then this element will have default value `false` for boolean..
 }
于 2012-10-03T17:28:32.847 に答える
0

このようなことを試すことができると思います.....

public Boolean[] chooseDice(int diceNum){
    Boolean[] responses = new Boolean[diceNum];
    boolean isCorrect = false;
    Scanner scansworth = new Scanner(System.in);
    for (int i=0; i<diceNum; i++){

while(!isCorrect){

if((scansworth.hasNext().equalsIgnoreCase("Y")) ||  (scansworth.hasNext().equalsIgnoreCase("N")))`{



    responses[i] = scansworth.next();
    isCorrect = true;

}else{

       isCorrect = false;


    }
  }

}
于 2012-10-03T17:39:56.393 に答える