2012-03-14 9 views
0

ユーザーがちょうどEnterを押すたびに実行するステートメントを無限に書いておきたい。私が知っているすべてのストリームリーダーは、ユーザがコンソールに何かを惹きつけたり、Enterを2回押したときに実行されます。ユーザーがEnterだけを押したときに実行する方法を書く方法は?

私はこのような何か書きたい


出力2が
出力3 [[オンセを押されたENTER] [入力はオンセ押された]
出力1:

コンソールを入力してください]
[so on ...]

これは現在のコード:

addQuestionsInArray(); 

Random r = new Random(); 
DataInputStream is = new DataInputStream(System.in); 
while (true) { 
    String question = questionsList.get(r.nextInt(questionsList.size())); 
    System.out.println(question); 
    if (String.valueOf(is.readInt()).equals("0")) { 
     break; 
    } 
} 
+0

通常のストリームリーダーを使用して作成した内容と、それが機能しない理由を表示できますか? – Taymon

+0

コードの一部です。あなたがしたことは、答えるのに役立ちます。 –

+0

ユーザー入力はテキスト、DataInputStreamはバイナリデータを読み取るためのものです。 –

答えて

8

入るヒットするユーザーを待つために、私は通常何かデモ

new Scanner(System.in).nextLine(); 

のような:

import java.util.Scanner; 

class Test { 
    public static void main(String[] args) { 
     System.out.println("Press enter."); 
     new Scanner(System.in).nextLine(); 
     System.out.println("Thanks."); 
    } 
} 

出力:

Press enter. 
[enter] 
Thanks. 

あなたの編集に関しては、まだScannerを使用することをお勧めします。あなたがSystem.in.read()文で間隔チェック、ユーザー入力のタイミングを指定してThreadを定義することができ

Scanner s = new Scanner(System.in); 

while (true) { 
    String question = questionsList.get(r.nextInt(questionsList.size())); 
    System.out.println(question); 

    String input = s.nextLine(); 
    // int input = s.nextInt(); if you want integers 

    if (input.equals("0")) 
     break; 

    // if (input == 0) break;  if you want integers 
} 
+0

彼はユーザーの入力を待つことを望まないと思うので、ユーザーがEnterキーを押すまでループステートメントを続行したいと考えています。 – MJM

+0

あなたのデモコードでは、任意の実行ループステートメントで、ユーザーは入力文字を入力する必要がありますが、私は正しく言ったのですか? – MJM

+0

ありがとうございます!すべての答えがあなたのものであれば、それはユートピアになります;) –

1

この場合、action listenerを探しています。

Here'sアクションリスナーとエンターキーに対処する別のSO質問です。

+0

コンソールで使用できますか? –

+1

はい。目的がプレスであれば、enterを押してコンソールに印刷します。 –

2

Enter character /n/rと等しい場合、メインループ

を終了します( DataInputStreamSystem.inに書かれたバイナリデータではなく、文字列や文字を使用する必要があります)
+0

これは方法の1つですが、この場合は最善ではありません;) –

関連する問題