You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java向数组指定位置插入元素不缩容出现OutOfBoundsException问题

异常根因分析
  • 核心越界点:你创建的newArray长度为原数组长度+1,后续遍历赋值时用了newArray的长度作为循环上限,当i等于原数组长度时,访问array[i]会超出原数组的下标范围,直接抛出OutOfBoundsException。
  • 潜在越界点:未对输入的position做合法性校验,如果输入的位置小于1、或大于原数组长度+1,会导致前序元素右移的循环里访问负下标或超出下标范围。
修复方案

首先修正赋值逻辑的循环范围,同时增加参数合法性校验,修复后代码如下:

import java.util.Scanner;

public class AddElementToSpecificPosition {

    private static Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {
        int[] array = arrayDetails();
        scanner.nextLine();
        System.out.println("Enter the position for the element \r");
        int position = scanner.nextInt();
        System.out.println("Enter the  element \r");
        int element = scanner.nextInt();
        addElementToSpecificPosition(array, position, element);
    }

    // 从用户侧获取数组输入信息
    private static int[] arrayDetails() {
        System.out.println("Enter the length for the array \r");
        int length = scanner.nextInt();
        scanner.nextLine();
        int[] intArray = new int[length];
        System.out.println("Enter the numbers for the array \r");
        for (int i = 0; i < intArray.length; i++) {
            intArray[i] = scanner.nextInt();
        }
        return intArray;
    }

    // 向指定位置添加元素
    private static void addElementToSpecificPosition(int[] array, int position, int element) {
        // 先校验位置合法性,位置从1开始计数,合法范围是1到原数组长度+1
        if (position < 1 || position > array.length + 1) {
            System.out.println("输入的位置不合法");
            return;
        }
        int lastIndexValue = array[array.length - 1];
        // 元素右移
        for (int i = array.length - 1; i > position - 1; i--) {
            array[i] = array[i - 1];
        }
        array[position - 1] = element;
        // 创建长度+1的新数组
        int[] newArray = new int[array.length + 1];
        // 仅遍历原数组的长度,避免访问原数组越界
        for (int i = 0; i < array.length; i++) {
            newArray[i] = array[i];
        }
        // 把原来的最后一位放到新数组末尾
        newArray[array.length] = lastIndexValue;
        // 打印结果
        for (int j = 0; j < newArray.length; j++) {
            System.out.println(newArray[j]);
        }
    }
}
注意事项

Java中的数组是定长结构,无法直接在原有数组对象上增加长度,所以必须创建新的更长的数组来存储插入后的内容,符合你不缩减原有元素、新增元素的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:57:02