如何成功运行Java Scanner?输入处理与数组存储问题求助
问题分析与修正方案
原代码核心问题
- 控制台输入流是单向的,第一个循环已经读取并消费了所有输入整数,后续创建新
Scanner也无法回溯重新读取。 - 第一个循环中读取的整数未保存,后续尝试重新读取输入填充数组的逻辑完全无效。
- 超出数量的判断条件错误:
i > 9要等到第11个整数才触发提示,而题目要求最多9个整数,应该在第10个整数输入时(i >= 9)就判定超出。
修正后的代码
import java.util.Scanner; public class LabProgram { public static void main(String[] args) { Scanner scnr = new Scanner(System.in); boolean tooMany = false; // 初始化数组最多容纳9个元素 int[] v = new int[9]; int count = 0; while (scnr.hasNextInt()) { int num = scnr.nextInt(); if (count >= 9) { tooMany = true; System.out.println("Too many numbers"); break; } v[count] = num; count++; } // 未超出数量时可使用数组(有效元素长度为count) if (!tooMany) { // 示例:打印验证数组内容 System.out.println("输入的数组内容:"); for (int i = 0; i < count; i++) { System.out.print(v[i] + " "); } } } }
修正说明
- 边读取输入边存入数组,一次完成计数与存储,避免输入流消费后的回溯问题。
- 当输入数量达到9个后,再输入整数立即触发提示并终止循环。
- 如果需要数组长度严格等于实际输入个数(不超过9),可在最后截断数组:
int[] finalArray = java.util.Arrays.copyOf(v, count);
内容的提问来源于stack exchange,提问作者PimpShrimp
相关产品推荐
相关产品推荐

