2016-05-12 2 views
0

プログラミングが新しく、「文字を推測する」ゲームを作成しようとしています。最初の人がキーを押した後、2番目の人がキーを押して、それが正しいと推測したかどうかを確認するという考え方です。行は「推測を持って、Enterキーを押します:」までSystem.in.read()を繰り返し使用します。

package bookExamples; 

public class GuessTheLetterGame { 

    public static void main(String[] args) throws java.io.IOException{ 
      char answer; 
      System.out.print("press a key and press ENTER:"); 
      answer= (char) System.in.read(); 
      char guess; 
      System.out.print("Have a guess and press ENTER: "); 
      guess = (char) System.in.read(); 
      if (guess == answer) 
        System.out.println("**Right**"); 

    } 

} 

それは大丈夫実行します:

はここに私のコードで、その後、私はもう一度キーを押ししようとした、コードは何の反応もありません。

は、事前にありがとう:)

+0

があるまでの誤差はありますか?それとも、それはちょうど停止ですか?あなたは文字を入力した後に入力しましたか? – Turtle

+0

投稿したコードに基づいて、キーを入力してEnterキーを押すと、正しい場合はメッセージが表示されます。そうでない場合、アプリケーションは終了します。 –

+1

'System.in'はライン読み取りモードであるため、Enterキーを押すまでプログラムによって何も受信されません。 – Andreas

答えて

0

は、元のコードの意図と一致したが、スキャナを提供する別の一つだとwhileループ試合

import java.util.Scanner; 

public class GuessTheLetterGame { 

    public static void main(String[] args) throws java.io.IOException{ 
     Scanner keyboard = new Scanner(System.in); 
     char answer; 
     char guess; 
     boolean right = false; 

     while(!right){ 

      System.out.print("press a key and press ENTER:"); 
      answer= (char) keyboard.next().charAt(0); 

      System.out.print("Have a guess and press ENTER: "); 
      guess= (char) keyboard.next().charAt(0); 
      if (guess == answer){ 
       System.out.println("**Right**"); 
       right = true; 
      } 
     } 
    } 
} 
-1

をあなたのコードでは推測保つために何のループがありません。それはワンショットの取引だ。推測を続けるには、コードの一部を繰り返す必要があります。

package bookExamples; 

public class GuessTheLetterGame { 

    public static void main(String[] args) throws java.io.IOException{ 
     char answer; 
     answer= 'A'; 
     char guess = '\0'; 

     Scanner scanner = new Scanner(System.in); 

     while(answer != guess) { 
      System.out.print("Have a guess and press ENTER: "); 
      guess = scanner.next().charAt(0); 

      System.out.println(guess); 
     } 

     System.out.println("**Right**"); 
} 

答えが正しいまで推測し続けると、if文は必要なくなります。書式を正しく維持するために残された唯一のことは、ユーザーに推測を示し、新しい行を開始することです。

注:スキャナを使用するようにコードを変更し、scanner.next()を一度に1文字ずつ取得してください。

+0

'read()'を呼び出すことは、ユーザがEnterを押したときにストリームに挿入された '\ r'(Windowsの場合)と' \ n'文字を読み込むことを意味します。結果:悪い回答をすると、「推測してEnterを押してください」というメッセージが複数回印刷されます。 – Andreas

+0

ありがとう、ええ、私は推測し続けることができます。しかし、私が望んでいたのは、 "答え"を修正するのではなく、最初の人が彼女が望むどんなキーでも押すことができます。どうすればこれを達成できますか? – Magicbeanbuyer

+0

スキャナを使用するように更新されました。更新中のプロンプトで修正してください。 –

1

System.in.read()をcharにキャストすると、システムからUTF-16にバイトがキャストされます。したがって、char c = (char) System.in.read();は非常に限られた入力に対してのみ機能します。
Scannerを使用して行全体を読み取ることをおすすめします。ここで

String answer = "A"; 

Scanner scanner = new Scanner(System.in); 
String guess = ""; 

while(! answer.equalsIgnoreCase(guess)) 
{ 
    guess = scanner.nextLine(); 
} 

System.out.println("CONGRATULATIONS YOU WON!"); 
関連する問題