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

Java使用for循环添加多个对象时ArrayList首元素为空问题求助

问题原因

这个问题是Scanner类的输入特性导致的:

  • nextInt()方法只会读取输入中的整数值,不会处理整数后方跟随的换行符
  • 你输入3按下回车后,输入缓冲区残留了换行符,第一次循环调用nextLine()时会直接读取这个残留的换行符,得到空字符串,所以索引0位置的food对象内容为空,同时3次循环里你实际只能再输入2个有效内容,自然缺失了第三个sushi的输入。

解决方法

方案1:消费nextInt()后的残留换行

在读取完limiter之后,额外调用一次nextLine()清空缓冲区残留的换行符即可:

package FoodRecommendation;

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        ArrayList<food> arrayList = new ArrayList<>();

        int limiter = in.nextInt();
        in.nextLine(); // 新增这一行,吃掉nextInt残留的换行符
        for (int j = 0; j < limiter ; j++) {
            arrayList.add(new food(in.nextLine()));
        }
        System.out.println(arrayList);
    }
}

方案2:统一使用nextLine()读取后转换类型

避免混用nextInt()和nextLine(),所有输入都用nextLine()读取,再将需要的数值做类型转换:

// 把原来的int limiter = in.nextInt();替换为下面的代码
int limiter = Integer.parseInt(in.nextLine());
// 后续循环不需要额外处理,直接用nextLine()读取食物名称即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:24:01