You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Scanner的nextLine()为数组赋值时跳过首个元素的问题

解决Scanner中nextInt()后nextLine()跳过第一个输入的问题

嘿,这个坑我刚学Java的时候也踩过!咱们来一步步捋清楚问题出在哪,再给你两个靠谱的解决办法。

问题根源

当你用keybo.nextInt()读取用户输入的数字(比如示例里的3)时,这个方法只会读取数字部分,而用户按下的**回车键对应的换行符(\n)**会留在输入缓冲区里。接下来第一次调用nextLine()时,它会直接读取这个残留的换行符,相当于读了一个空字符串,所以就出现了“跳过第一个元素”的假象——其实它读了个空行而已。

解决方案一:用额外的nextLine()吃掉换行符

在nextInt()之后,专门加一行keybo.nextLine()来消耗掉缓冲区里的换行符,这样后续的nextLine()就能正常读取用户输入的内容了:

System.out.print("How many extras?: ");
int extras = keybo.nextInt();
// 关键:吃掉nextInt()留下的换行符
keybo.nextLine();
String[] extraArray = new String[extras];
for (int i = 1; i<=extras; i++) {
    System.out.println("Enter extra " + i + ": ");
    extraArray[i-1] = keybo.nextLine();
}
sandwich1.setExtras(extraArray);

解决方案二:用nextLine()读取数字再转成整数

另一种更彻底的方式是全程用nextLine()读取输入,把读取到的字符串转成整数,这样就不会有残留换行符的问题了:

System.out.print("How many extras?: ");
// 先读取整行输入,再转换为整数
int extras = Integer.parseInt(keybo.nextLine());
String[] extraArray = new String[extras];
for (int i = 1; i<=extras; i++) {
    System.out.println("Enter extra " + i + ": ");
    extraArray[i-1] = keybo.nextLine();
}
sandwich1.setExtras(extraArray);

小补充

如果你的“extra”内容里不会包含空格,用keybo.next()代替nextLine()也能临时解决问题,但nextLine()的优势是可以读取包含空格的整行内容,更适合需要完整输入的场景。

内容的提问来源于stack exchange,提问作者DrSooch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:06:07