You need to enable JavaScript to run this app. 为什么我的Java数组输入程序for循环仅执行一次就终止,无法多次接收输入?
优惠活动
大模型
产品
解决方案
定价
更多

为什么我的Java数组输入程序for循环仅执行一次就终止,无法多次接收输入?

核心问题定位
  • 循环仅执行一次的直接原因,是你获取数组长度的逻辑出现了本质偏差:
    你写的int n = args[0].length(); 是取命令行第一个参数字符串的字符个数作为数组长度,而非把这个参数字符串代表的数值转成整数当长度。
    举个实际运行场景的例子:你启动程序时如果传入参数java PutNumbersIntoArray 3,那么args[0]是字符串"3",它的.length()返回值是1,最终n被赋值为1,for循环自然只会执行1次就结束,完全匹配你遇到的现象。
  • 这个写法还存在潜在崩溃风险:如果运行时没有传入任何命令行参数,代码会直接抛出数组下标越界异常,程序无提示直接终止。
修正步骤
  1. 替换数组长度的获取逻辑:用Integer.parseInt()把命令行传入的长度字符串转成真正的整数,替代之前取字符串长度的写法,也就是int n = Integer.parseInt(args[0]);。比如传入参数字符串"3",此时n会正确得到数值3,for循环就会按预期执行3次。
  2. 增加基础校验逻辑,避免无参数、参数非数字导致的程序崩溃。

补充:如果你的设计是让程序启动后再提示用户输入数组长度,而非从启动命令的参数读取,只需要把获取n的代码调整为:

System.out.print("Please enter the length of your array: ");
int n = StdIn.readInt();

不需要依赖命令行参数即可实现对应交互逻辑。

修正后可直接运行的代码
import edu.princeton.cs.algs4.StdIn;
public class PutNumbersIntoArray {
    public static void main(String args[]) {
        // 校验是否传入了数组长度参数
        if (args.length < 1) {
            System.out.println("请在启动程序时传入数组长度数值,运行示例:java PutNumbersIntoArray 3");
            return;
        }
        // 正确将参数字符串转为整数数组长度
        int n = Integer.parseInt(args[0]);
        int[] arr = new int[n];

        for (int i = 0; i < n; i++) {
            System.out.print("Please enter a number to go into your array: ");
            arr[i] = StdIn.readInt();
            System.out.println(arr[i]);
        }
    }
}

注意:StdIn 是 Princeton 算法课程提供的标准输入工具类,运行代码前需要确保已经导入对应依赖,否则会出现编译报错。


内容的提问来源于stack exchange,提问作者joffry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.01 12:54:07