2017-11-01 11 views
-1

シンプルなHiLoカードゲームをコーディングし、カードのデッキからカードの価値を与え、次のカードのバリューを推測しようとすると「高い」、「低い」または「等しい」と入力します。ユーザストリングの入力を確認する

ちょうど実際には、繰り返し入力でユーザーの入力検証を行うことはできません。必要なパラメータを持つ文字列が入力されるまで移動しません。

これまでの私のコード:

import java.util.Scanner; 
import java.util.Random; 

public class HiLoGame { 

public static void main(String[] args) { 

    Scanner reader = new Scanner(System.in); 
    Random randomCard = new Random(); 
    int numberOfSuccesses = 0; 
    boolean finished = false; 
    int card = (randomCard.nextInt(13) + 2); 
    while (finished != true) { 
     int nextCard = (randomCard.nextInt(13) + 2); 
     String pictureCard = ""; 
     if (((numberOfSuccesses < 0) ? nextCard : card) == 11) { 
      pictureCard = "Jack"; 
     } else if (((numberOfSuccesses < 0) ? nextCard : card) == 12) { 
      pictureCard = "Queen"; 
     } else if (((numberOfSuccesses < 0) ? nextCard : card) == 13) { 
      pictureCard = "King"; 
     } else if (((numberOfSuccesses < 0) ? nextCard : card) == 14) { 
      pictureCard = "Ace"; 
     } 

     System.out.println("The card is a " + ((card > 10) ? pictureCard : card)); 

     if (numberOfSuccesses == 4) { 
      System.out.println("Congratulations. You got them all correct"); 
      finished = true; 
      break; 
     } 
     while (!reader.nextLine().toLowerCase().equals("higher") 
       || !reader.nextLine().toLowerCase().equals("lower") 
       || !reader.nextLine().toLowerCase().equals("equal")) { 
      System.out.println("Try again!"); 
      reader.next(); 
     } 

     String userGuess = reader.nextLine().toLowerCase(); 

//TODO validate input 
     if (userGuess.equals("higher")) { 
      if (nextCard > card) { 
       numberOfSuccesses++; 
      } else { 
       finished = true; 
       break; 
      } 
     } else if (userGuess.equals("lower")) { 
      if (nextCard < card) { 
       numberOfSuccesses++; 
      } else { 
       finished = true; 
       break; 
      } 
     } else if (userGuess.equals("equal")) { 
      if (nextCard == card) { 
       numberOfSuccesses++; 
      } else { 
       finished = true; 
       break; 
      } 
     } 

     System.out.println(numberOfSuccesses); 
     card = nextCard; 
    } 
    if (numberOfSuccesses < 4) { 
     System.out.println("Sorry, incorrect!"); 
    } 
} 
} 

と関連するコードの抜粋:それはちょっとだけ「もう一度お試しください」上とを与える上の部分で立ち往生

while (!reader.nextLine().toLowerCase().equals("higher") 
      || !reader.nextLine().toLowerCase().equals("lower") 
      || !reader.nextLine().toLowerCase().equals("equal")) { 
     System.out.println("Try again!"); 
     reader.next(); 
    } 

。私は.hasNextInt()を使用する必要があるプログラムを完了しましたが、この文字列の検証には苦労しています。

ご協力いただきありがとうございます!

+0

これらの3つのサブセクションを別々に評価し、何を得るか教えてください。 –

+0

@ john3136のコメントに加えて、ユーザの入力が「それほど高くない」、「低くない」、または「等しくない」というユーザの再入力が必要であると考えるべきである。また、pictureCardロジックはちょっと変わっています。これは、numberOfSuccessが負になることはないため、動作します。 – JimW

答えて

1

reader.nextLine()を最大3回呼び出すので、3つの異なる文字列を比較しています。

"xxx"と入力すると、 "xxx!= higher"と表示され、別の行を読みます。 "xxx"と "lower"または "equal"を比較しません。

&&||にも注意してください。

解決策は、変数に1行を読み込み、その変数を各条件に使用することです。私はこれが明らかに宿題か自己学習の練習であるので、それを書くつもりはないので、あなた自身がそれを行うのに最適です。

0

あなたの状態のロジックを変更する必要があると思います。入力が「より高い」と等しいか否かを「低い」または「等しい」と等しくないかどうかチェックしているので、期待値を入力しても全体的に偽になります。「高い」と入力すると、 。あなたはandsに変更する必要があります。