Java程序中第二个for循环无法执行问题求助
问题分析与解决
你的第二个循环根本没执行的核心原因是:第一个for循环卡住了。
你定义的数组arrayNumber长度是10,第一个循环的条件是i < arrayNumber.length,意味着它会尝试执行10次,每次都调用scan.nextInt()读取整数。但你只输入了5个数字(5 4 3 2 1),程序会一直停在scan.nextInt()这里等待你输入剩下的5个数字,自然不会走到第二个循环的代码。
另外,就算第一个循环执行完,你的第二个循环逻辑也不符合预期:它从数组最后一位(索引9)倒着打印到索引1,但数组后5位都是默认的0,输出会是一堆0,,完全不是你想要的1,2,3,4,。
修复方案
方案1:读取整行输入,灵活处理实际输入的数字
这种方式无需固定数组长度,能适配任意数量的输入:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("Put number here: "); // 读取整行输入并分割为数字字符串数组 String[] numStrs = scan.nextLine().split(" "); int[] arrayNumber = new int[numStrs.length]; // 正向存入数组并输出 for (int i = 0; i < arrayNumber.length; i++) { arrayNumber[i] = Integer.parseInt(numStrs[i]); System.out.print(arrayNumber[i] + ","); } System.out.println(); // 换行分隔输出 // 倒序输出(从最后一个元素到第二个元素,匹配你的预期) for (int i = arrayNumber.length - 1; i > 0; i--) { System.out.print(arrayNumber[i] + ","); } scan.close(); } }
输入5 4 3 2 1后,输出如下:
Put number here: 5 4 3 2 1 5,4,3,2,1, 1,2,3,4,
方案2:调整循环终止条件,避免等待多余输入
如果坚持用固定长度数组,可通过scan.hasNextInt()判断是否还有输入,防止程序阻塞:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int[] arrayNumber = new int[10]; int count = 0; // 记录实际输入的数字个数 System.out.println("Put number here: "); // 只读取有输入的数字,最多读取10个 while (scan.hasNextInt() && count < arrayNumber.length) { arrayNumber[count] = scan.nextInt(); System.out.print(arrayNumber[count] + ","); count++; } System.out.println(); // 倒序输出实际输入的数字(匹配预期范围) for (int i = count - 1; i > 0; i--) { System.out.print(arrayNumber[i] + ","); } scan.close(); } }
该方案既解决了输入不足导致的阻塞问题,又能避免打印数组中未赋值的默认0。
关键总结
- 不要让输入循环的终止条件依赖固定数组长度,除非你能确保用户会输入对应数量的内容;
- 使用
scan.hasNextInt()或整行读取的方式,可灵活适配用户的输入场景; - 倒序输出时要明确遍历范围,只针对有实际值的数组元素操作。
内容的提问来源于stack exchange,提问作者Trisha S.
相关产品推荐
相关产品推荐

