将元素插入双数组

时间:2012-09-28 22:58:16

标签: java arrays insert double element

我有一个看似很好的方法,可以将double值放入double数组中。它是

insert(int i, double value)

其中i是索引(array [i]),值是我想要的索引。

我将方法拆分为边缘情况,构建在足够安全的初始化数组空间(长度)块中,并使用方法的一部分进行缓冲,每次元素数等于或大于长度时,该方法的长度加倍。然后,当输入i大于数组的项数(numItems)以及小于numItems时,我输入方法。我< numItems工作正常,但是当我尝试放入

insert(63,3)
insert(15,3)
insert(23,3)

进入我的(1,-1,5,23)数组我只在阵列的最后一部分得到2个三。我的初始数组长度是10,因此它不是内存问题。我认为它可能是一个打印方法错误,并试图手动获取最后一个元素,这告诉我索引是空的。因此,我的方法中出现了逻辑错误。

// if i is greater than the number of items, insert value into numItems index,
// and not any farther. e.g. if i = 100000 and numItems = 10, put value into
// items[10] and not items[100000];
if (i > numItems) 
{
    items[numItems] = value; 
    numItems++; //add to counter
    return;
}

问题是,它是如此简单的代码,我无法分辨它有什么问题。非常直观,非常令人费解。想法?

下面的

是整个插入方法

public void insert(int i, double value) //insert value into array[i]
{
    if(i < 0)
    {
        System.out.println("i < 0; please input i >= 0 for array indices."); //an array cannot have an indice < 0;
        return;
    }

    if (numItems >= items.length) // if the number of items becomes equal or greater than the array containing it
    {
        double[] tempItems = new double [items.length * 2]; // create a new array double the size of current
        for(int j =0 ; j < items.length; j++ ) //and copy all elements into the new array
        {
            tempItems[j] = items[j];
        }

        items = tempItems; //set the temp array as the main array.
    }

    if (i > numItems) //if i is greater than the number of items, insert value into numItems index, and not any farther.
    {                 // i.e. if i = 100000 and numItems = 10, put value into items[10] and not items[100000];
        items[numItems] = value; 
        numItems++; //add to counter
        return;
    }

    if ( i < numItems) //if i is inside the used boundaries of the array
    {
        for (int k = numItems; k > i; k--) //shift values over to the right.
        {   
            items[k]=items[k-1];
        }

        items[i] = value; //and insert value into i
        numItems++; //add to counter
        return;
    }


}

1 个答案:

答案 0 :(得分:0)

如果有任何修改会改变数组大小(插入或删除),建议使用java.util.List实现。例如ArrayList。它可以帮助您避免因临时数组和移动元素而头疼。

此外,要将一些元素从数组复制到数组,您应该考虑使用System.arraycopy等现有方法和java.util.Arrays中的各种复制方法。