2012-05-08 7 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を使用します。私はUbuntuの10.04、64ビットを使用して、今、別のコンピュータ上のプログラムを実行しようとしたのではなく、Ubuntuの10.04、32ビットのように:

javac hello_world.java 
java hello_world 

EDIT前。私はそれを同じ方法で実行し、再コンパイルせず、プログラムは正常に動作します。

これがこのように動作する理由は何ですか?

+0

デバッガを試しましたか? – home

答えて

1

DEBUG 1が期待どおりに出力されないようにするフラッシュ/バッファリングの問題が発生する可能性があります。つまり、println("DEBUG 1")keyboard.nextLine()の前に実行される可能性がありますが、なんらかの理由で出力が途中で止まってしまい、入力が読み込まれるまで出力されません。

しかし、実際には、Helloの後に1つ、「新しい入力を待っています」という行に2つの改行を入力する必要があります。もしそうなら、これは説明するのが一層難しい。おそらく、回線終端の非互換性の問題です。

標準の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と非常に似ており、それが彼らのパッケージマネージャから、多くのディストリビューションのために利用可能です。 gcjではなくopenJDKで確認できますか?

+0

また、Win7でNetbeansでプログラムを実行している正しい出力が得られます。 – ChadNC

関連する問題