Java ArrayList输入异常求助:指定输入次数与实际接收数量不符
问题原因与解决方案
嘿,这个问题我碰到过好多次啦!核心原因是**Scanner.nextInt()不会读取输入末尾的换行符**,导致后续的nextLine()直接“吃”了这个残留的换行符,让你误以为只输入了一次。
具体分析
当你输入2然后按回车时,输入缓冲区里其实是"2\n"。s.nextInt()只读取了整数2,剩下的\n(换行符)还留在缓冲区里。第一次循环执行String sc=s.nextLine();时,它会直接读取这个\n,相当于得到了一个空字符串,而不是等待你手动输入。这就导致:
- 当i=2时,第一次循环没让你输入就完成了
- 第二次循环才会等待你输入内容
- 最终列表里会有一个空字符串和你输入的内容,但你直观上只输入了一次
两种解决办法
方法1:在nextInt()后手动清除换行符
在读取完整数后,额外调用一次nextLine()来吃掉残留的换行符,这样后续的nextLine()就能正常读取你的输入了:
import java.util.*; public class dotcom{ public static void main(String Args[]) { Scanner s = new Scanner(System.in); System.out.println("Input :"); int i = s.nextInt(); s.nextLine(); // 新增这行,清除缓冲区里的换行符 ArrayList<String> mylist = new ArrayList<String>(); System.out.println(mylist.size()); for(int x=1 ; x<=i ; x++) { String sc=s.nextLine(); mylist.add(sc); } System.out.println(mylist.size()); } }
方法2:全程用nextLine()读取,再转成整数
这种方法可以彻底避免缓冲区残留的问题,先读取整行输入,再把字符串转成整数:
import java.util.*; public class dotcom{ public static void main(String Args[]) { Scanner s = new Scanner(System.in); System.out.println("Input :"); // 先读取整行,再转成整数 String numInput = s.nextLine(); int i = Integer.parseInt(numInput); ArrayList<String> mylist = new ArrayList<String>(); System.out.println(mylist.size()); for(int x=1 ; x<=i ; x++) { String sc=s.nextLine(); mylist.add(sc); } System.out.println(mylist.size()); } }
两种方法都能解决你的问题,选哪种看个人习惯~
内容的提问来源于stack exchange,提问作者user9212016
相关产品推荐
相关产品推荐

