2014-10-03 40 views
8

我正在創建一個簡單的故事,它偶爾會提示用戶按ENTER鍵。它在我第一次提示時運行,但它會立即執行其他提示,也許是因爲程序運行速度非常快,直到您按下ENTER鍵時,它已經運行檢查提示。Java控制檯在繼續之前提示輸入ENTER

任何想法?代碼如下。

System.out.println("...*You wake up*..."); 
    System.out.println("You are in class... you must have fallen asleep."); 
    System.out.println("But where is everybody?\n"); 
    promptEnterKey(); 

    System.out.println("You look around and see writing on the chalkboard that says CBT 162"); 
    promptEnterKey(); 

////////////////////////////////////////////////////// 

public void promptEnterKey(){ 
    System.out.println("Press \"ENTER\" to continue..."); 
    try { 
     System.in.read(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+2

我想你需要使用掃描儀類 – Emrage 2014-10-03 18:16:34

+1

看看[這個SO帖子](http://stackoverflow.com/questions/7877529/java-string-scanner-input-does-not-wait-for -info-moves-directly-to-next-stateme)...請在回收相同的東西之前閱讀其他問題 – starvator 2014-10-03 18:17:39

+1

將來,您還可以'System.out.print(System.in.read());'看看發生了什麼。 [This Ascii table](http://www.asciitable.com/)指出正在讀取回車符和換行符。 – Compass 2014-10-03 18:24:06

回答

11

爲什麼System.in.read沒有阻止所述第二時間的原因是,當用戶按下ENTER鍵的第一次,兩個字節將對應於\r\n存儲。

改用Scanner比如:如果我們讓您使用System.in的方法

public void promptEnterKey(){ 
    System.out.println("Press \"ENTER\" to continue..."); 
    Scanner scanner = new Scanner(System.in); 
    scanner.nextLine(); 
} 
+0

請勿使用掃描儀,因爲您實際上並未使用輸入。看看下面我的解決方案......最好是因爲你不需要輸入。 – brso05 2014-10-03 18:21:27

+0

輸入不必使用。垃圾可以在最壞的情況下在線上輸入,並且一旦預期的/ r/n輸入被執行,它就不會對程序產生影響。 – Compass 2014-10-03 18:23:17

+1

@ brso05 - 它們都是有效的解決方案。 – Krease 2014-10-03 18:23:21

2

,要做的就是定義字節正確的事情,你會想讀,改變你的prompEnterKey這樣:

public static void promptEnterKey(){ 
     System.out.println("Press \"ENTER\" to continue..."); 
     try { 
      int read = System.in.read(new byte[2]); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

它會按需要工作。 但是,正如其他人所說,你可以嘗試不同的方法,如Scanner班,這個選擇取決於你。

+3

如果我們使用System.in,除非'/ r/n'從堆棧中讀取,否則我們不應該讓它繼續。否則按隨機鍵會導致代碼繼續時,它不應該按規格。 – Compass 2014-10-03 18:27:58

+3

是的,你有一個觀點,爲了更安全的情況,他需要對這個可能的條目進行判斷。 – 2014-10-03 18:31:30