2012-05-08 41 views
1

我剛剛開始使用Java,我一直試圖讓控制檯輸入正常工作。下面的代碼:控制檯輸入等待它不應該

System.out.println("Write a word: "); 
Scanner keyboard = new Scanner(System.in); 
System.out.println("DEBUG 1"); 
str = keyboard.nextLine(); 
System.out.println("DEBUG 2"); 
System.out.println(str); 

這應該只是需要輸入一次,並打印輸入,就像這樣:

Write a word: 
DEBUG 1 
Hello   //My input 
DEBUG 2 
Hello   //Output 

但是,這是發生了什麼:

Write a word: 
Hello   //My input 
DEBUG 1 
       //Waiting for new input 
DEBUG 2 
Hello   //The first input 

所以,似乎對我來說,它在某種程度上需要輸入在線掃描儀鍵盤=新的掃描儀(System.in);然後把它放在我的變量str。我用GCJ用下面的命令來編譯編譯和運行:

javac hello_world.java 
java hello_world 

編輯:我試圖運行在另一臺計算機上的程序現在,使用Ubuntu 10.04 64位,而不是Ubuntu的10.04 32位作爲之前。我以相同的方式運行它,並沒有重新編譯,程序工作正常。

任何想法,爲什麼它的行爲是這樣的?

+0

你嘗試過使用調試器嗎? – home

回答

1

可能存在刷新/緩衝問題,導致DEBUG 1輸出的時間晚於您的預期。即,在keyboard.nextLine()之前可以執行println("DEBUG 1"),但由於某種原因,輸出在途中停頓,並且在讀取輸入之前不輸出。

但我認爲你的意思是你實際上必須在「等待新輸入」行輸入兩個換行符,一個在Hello後面。如果是這樣,這是更難解釋。也許是行終止不兼容問題。

使用標準JDK進行編譯和執行會產生您期望的行爲。

0

我在使用Oracle JDK 6的windows上運行的eclipse中檢查了你的程序,我得到了預期的結果。

public static void main(String[] args) { 
     System.out.println("Write a word: "); 
     Scanner keyboard = new Scanner(System.in); 
     System.out.println("DEBUG 1"); 
     String str = keyboard.nextLine(); 
     System.out.println("DEBUG 2"); 
     System.out.println(str); 
    } 

結果:

Write a word: 
DEBUG 1 
hello 
DEBUG 2 
hello 

的OpenJDK是非常類似於Oracle JDK,這是可以從他們的包管理器的許多發行版。你可以檢查openJDK而不是gcj。

+0

我也在Win7上得到了運行Netbeans程序的正確輸出。 – ChadNC

相關問題