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
相关产品推荐
相关产品推荐

