首页 > 解决方案 > 为什么方法 add() 不会增加数组的大小?

问题描述

我正在编写一个手动程序,它将动态增加数组大小。但它总是通过越界异常。我不知道为什么。任何帮助表示赞赏!

public class variable_arrays_no_list_use {

public static void main(String[] args) {
    int size = 2;
    int []arr = new int[size];
    arr = add(arr, 5);
    arr = add(arr, 6);
    arr = add(arr, 7);

    
}

public static int lastindex = -1; //last index variable

public static int [] add(int []array,int value)
{
    
    if (array.length == lastindex+1) {
        int []tempa = new int[lastindex*2];

        
        for (int i = 0; i < array.length; i++) {
            tempa[i] = array[i];
        }
        array = tempa;

    }
        array[++lastindex] = value;
        return array;
}}

错误信息:

线程“主”java.lang.ArrayIndexOutOfBoundsException 中的异常:在 variable_arrays_no_list_use.main(variable_arrays_no_list_use.java:8) 的 variable_arrays_no_list_use.add(variable_arrays_no_list_use.java:28) 处的索引 2 超出了长度 2 的范围

标签: javaarrays

解决方案


问题出在这部分:

if (array.length == lastindex+1) {
    int []tempa = new int[lastindex*2];

在这里,当您添加第三个元素时,lastindex其值为 1,array.length为 2,而在 if 中,条件为真,因为2 == 1+1. 但是,为了计算新数组的新大小,您取 的值lastindex,它仍然是 1,因此新数组再次获得大小 2。您想要做的事情如下:

if (array.length == lastindex+1) {
    int []tempa = new int[(lastindex+1)*2];

推荐阅读