2012-03-14 20 views
0

我想寫無限,而每次用戶只需按下Enter時將執行語句。當用戶輸入任何內容到控制檯或按Enter兩次時,我知道每個流讀取器都會執行。如何編寫僅在用戶按下時執行的方法Enter?


我想寫的東西是這樣的:

控制檯:
輸出1輸入被壓ONSE]
輸出2輸入被壓ONSE]
輸出3輸入已被按下]
[so on ...]

This是我當前的代碼:

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 2012-03-14 13:24:56

+0

一段代碼,你所做的將有助於回答。 – 2012-03-14 13:26:25

+0

用戶輸入是文本,DataInputStream用於讀取二進制數據。 – 2012-03-14 13:40:27

回答

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。 (DataInputStream應該用於二進制數據,而不是字符串和文字寫在System.in):

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 2012-03-14 13:37:03

+0

通過您的演示代碼,在任何執行循環語句中,用戶必須輸入一個輸入字符,我說的是否正確? – MJM 2012-03-14 13:49:21

+0

非常感謝!如果每個答案都與你的答案一樣,那麼它將成爲一個烏托邦;) – 2012-03-14 14:53:40

1

在這種情況下,您將需要尋找action listener

Here's另一個SO問題,解決動作監聽器和輸入密鑰。

+0

它可以在控制檯中使用嗎? – 2012-03-14 13:27:07

+1

是的。如果目標是按輸入打印到控制檯。 – 2012-03-14 13:28:16

2

可以定義一個Thread與指定時間間隔檢查用戶輸入與System.in.read()聲明,如果與Enter character /n/r等於終止主循環

+0

這是其中一種方式,但在這種情況下不是最好的;) – 2012-03-14 13:43:17

相關問題