作为今天早上我在Uni的Java课程练习,我不得不写一个小程序来要求用户输入一些细节,然后打印回来.我已经完成了它的写作,但我遇到了一个奇怪的问题.
请参阅以下代码:
import java.util.Scanner;
public class Scanner_Exercise
{
public static void main (String[] args)
{
Scanner keyboardIn = new Scanner(System.in);
int accountId;
String accountName;
float accountBalance;
System.out.println("Account ID: "); //Line 13
accountId = keyboardIn.nextInt(); //Line 14
System.out.println("Account name: "); //Line 16
accountName = keyboardIn.nextLine(); //Line 17
System.out.println("Account balance: ");
accountBalance = keyboardIn.nextFloat();
}
}
Run Code Online (Sandbox Code Playgroud)
当该程序运行时,跳过第17行(参见注释); Account name:打印,但用户没有机会输入信息,就好像该行代码被注释掉了一样.没有错误被抛出.输出如下所示:
帐户ID:
2
帐户名称:
帐户余额:
但是,如果我用16和17切换第13行和第14行,如下所示,程序运行正常,并且不会跳过任何行.
System.out.println("Account name: "); //Line 16
accountName = keyboardIn.nextLine(); //Line 17
System.out.println("Account ID: "); //Line 13
accountId = keyboardIn.nextInt(); //Line 14
Run Code Online (Sandbox Code Playgroud)
为什么在第一种情况下跳过第17行,而不是第二种?
如果它有某种相关性,我使用的是JDK 6 Update 18和TextPad 5.3.1.
NextInt()仅消耗整数值.一旦该方法确定输入的输入是一个完整的数字,它就会退出,而不会消耗按返回键所产生的字符.当你调用NextLine()它时,会看到缓冲区中的返回字符并立即返回零长度字符串.
为了解决这个问题,我建议你随时使用NextLine().命令行用户非常习惯返回键是"输入值"键.NextLine()通过使用将结果解析为整数Integer.valueOf(result).
| 归档时间: |
|
| 查看次数: |
457 次 |
| 最近记录: |