Java数组输入时循环重复打印Enter the values冗余行问题求解
问题根因
你将Enter the values提示的打印逻辑放在了和数组长度相同次数的for循环内,同时Scanner.nextInt()方法会自动跳过输入缓冲区中的空格、换行等分隔符,无需阻塞等待用户输入即可直接读取缓冲区中已有的数值:
- 你输入数组大小为4后,一次性输入了
1 2 3 4四个数值,此时输入缓冲区已经存在4个可读取的int值 - 第一次循环打印提示后读取了数值1,剩下3次循环不需要阻塞等待输入,直接执行打印提示的代码再读取缓冲区剩余的数值,就出现了多打印三次提示的异常表现。
解决方案
根据你的使用场景可以二选一:
方案1:支持一次性输入所有数值(符合你给出的期望输出效果)
将打印提示的代码移到循环外,只打印1次即可,修改后的main方法代码如下:
public static void main(String []args) { Scanner x = new Scanner (System.in); int num; System.out.print("Enter the size: "); num = x.nextInt(); int array [] = new int [num]; // 提示移到循环外部,仅打印一次 System.out.print("Enter the values: "); for(int i=0;i<num;i++){ array[i] = x.nextInt(); } System.out.print("Father = "+father(array, num)+", Son = "+son(array, num)); x.close(); }
修改后运行输出和你给出的期望结果完全一致。
方案2:逐次输入单个数值
如果你的业务要求每次输入一个数值再提示下一次输入,只需要引导用户每次输入单个数值后按下回车键即可,此时输入缓冲区每次仅存在一个可读取的int值,每次循环都会阻塞等待用户输入,不会出现重复打印提示的问题,运行效果如下:
Enter the size: 4 Enter the values: 1 Enter the values: 2 Enter the values: 3 Enter the values: 4 Father = 9, Son = 6
内容的提问来源于stack exchange,提问作者meorasso
相关产品推荐
相关产品推荐

