我刚刚开始使用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
所以,在我看来,它在某种程度上需要输入 Scanner keyboard = new Scanner(System.in); ,然后将它放入我的变量 str 。我使用gcj编译以下命令来编译和运行:
javac hello_world.java
java hello_world
编辑:我现在尝试在另一台计算机上运行该程序,使用Ubuntu 10.04 64位,而不是像以前那样使用32位的Ubuntu 10.04。我以同样的方式运行它并且没有重新编译,程序运行正常。
为什么它的表现如此?
答案 0 :(得分:1)
可能存在冲洗/缓冲问题导致DEBUG 1的输出时间比您预期的要晚。即,println("DEBUG 1")
可以在keyboard.nextLine()
之前执行,但由于某种原因,输出会在途中被阻止,并且在读取输入之前不会输出。
但我认为你的意思是你实际上必须输入两个换行符,一个在Hello之后,一个在“Waiting for new input”行。如果是这样,这就更难解释了。也许是线路终端不兼容问题。
使用标准JDK进行编译和执行可以提供您期望的行为。
答案 1 :(得分: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来检查。