You need to enable JavaScript to run this app. Java实现int数组返回非空前缀字符串数组的代码报错排查
优惠活动
大模型
产品
解决方案
定价
更多

Java实现int数组返回非空前缀字符串数组的代码报错排查

代码核心错误排查
  • 数组越界异常触发:循环的终止条件为i < numbers.length,当执行到最后一轮循环(i = numbers.length - 1)时,代码会执行seq += ", " + numbers[i + 1],此时访问的数组下标为numbers.length,超出整数数组的最大合法下标范围(最大合法下标为numbers.length - 1)。比如输入为[3,1,4]时,代码会正常把前两个前缀、第三个前缀存入结果数组,随后在最后一次循环的拼接步骤触发ArrayIndexOutOfBoundsException,完全无法正常返回结果。
  • 空入参场景直接崩溃:代码初始化阶段直接读取numbers[0]拼接初始字符串,如果传入的整数数组长度为0,这一行代码就会直接触发数组越界,完全不具备边界兼容能力。
  • 冗余无效逻辑:代码中定义的result变量仅在末尾被赋值为arr后直接返回,没有承担任何数据处理作用,属于无意义的冗余代码。
修正后可直接运行的代码
public static String[] getAllPrefixes(int[] numbers) {
    int arrLen = numbers.length;
    String[] result = new String[arrLen];
    // 空入参直接返回空结果数组
    if (arrLen == 0) {
        return result;
    }
    StringBuilder prefixBuilder = new StringBuilder();
    for (int i = 0; i < arrLen; i++) {
        // 非首元素前增加逗号分隔符
        if (i != 0) {
            prefixBuilder.append(", ");
        }
        prefixBuilder.append(numbers[i]);
        // 把当前拼接完成的前缀包裹中括号存入结果数组
        result[i] = "[" + prefixBuilder + "]";
    }
    return result;
}
修正逻辑说明
  • 移除原有循环末尾拼接下一个元素的逻辑,改为遍历到哪个元素就把该元素拼接到当前前缀字符串中,存值顺序天然和各长度前缀一一对应,从根源上避免循环末尾的越界访问。
  • 使用StringBuilder替代不可变的String做循环内拼接,避免反复创建字符串对象带来的不必要性能损耗。
  • 增加空入参的前置判断,避免读取数组首元素时的越界问题。
  • 保留清晰的变量命名,去掉冗余的临时变量,简化代码执行流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 19:15:07