将一个数组的多个元素插入另一个数组(从索引开始插入这些元素)

时间:2015-03-01 19:22:45

标签: java arrays

我有一个有3个元素[0,4,0]的数组,我有另一个元素数组[1,2,3]。我试图在我的第一个数组的前0个插入这3个元素(1,2,3),所以结果如下:[1,2,3,4,0]然后我有第三个数组由我试图在最后0处插入的元素[5,6,7],所以最终结果是:[1,2,3,4,5,6,7]。有什么想法吗?

public static int[] depositElements(int[] from, int[] to, int index) {
    int originalIndex = index;
    int[] newArray = new int[(to.length + from.length) - 1];
    for(int i = 0; i < from.length; i++) {
        newArray[index++] = from[i];
    }
    //System.arraycopy(to, originalIndex + 1, newArray, originalIndex + (from.length), to.length - 1);
    System.out.println("NEWARRAY: "+Arrays.toString(newArray));
    return newArray;
}

以下是使用上述方法的代码:

boolean looped = false;
int[] old = objectIds;
for(int j = 0; j < multipleObjects.size(); j++) {
    Integer[] mObjects = multipleObjects.get(j);
    System.out.println("New ObjectIds in the MultipleObjects Cache: "+Arrays.toString(mObjects));
    if(!looped) {
        for(int i = 0; i < objectIds.length; i++) {
            System.out.println(i);
            if(objectIds[i] == 0) {
                int[] newArray = ArrayUtils.toPrimitive(multipleObjects.get(j++));
                System.out.println("At "+i+" "+Arrays.toString(newArray));
                old = ArrayUtils.depositElements(newArray, old, ArrayUtils.indexOf(old, 0));
                System.out.println("Old is currently: "+old.length+" "+Arrays.toString(old));
            }
            if(i == objectIds.length - 1) {
                System.out.println("Looped once.");
                looped = true;
            }
        }
    }
}
System.out.println("OLD OBJECT IDS: "+Arrays.toString(old));
System.out.println("ObjectIds Array: "+Arrays.toString(objectIds));

3 个答案:

答案 0 :(得分:0)

您永远不会将to数组中的任何值复制到newArray。您需要复制索引前面的元素和from数组内容后面的元素。

答案 1 :(得分:0)

如果实例化的数组[0,4,0]是预设的,你可以用其他数组信息(IE from.length [0])替换数组的第0和第2个索引,它似乎永远不会复制值结束了。

答案 2 :(得分:0)

由于您要保留to[]数组的值,因此必须确保在该数组中跟踪剩余值(替换后)。这取决于index。为此,您可以使用分支将问题分成两部分:

  1. 如果您的索引是&#39; 0&#39; ,那么在您的depositElements方法实现(使用originalIndex变量)稍作更改后,您就可以得到结果。
  2. 如果您的索引不是数组中的第一个,那么您应该保留数组的第一部分,然后再添加新值,这样您就需要使用originalIndex变量,因为索引本身在代码中发生了变化。
  3. 这是您实现代码的方法:

        public static int[] depositElements(int[] from, int[] to, int index) {
        int originalIndex = index;
        int[] newArray = new int[(to.length + from.length) - 1];
    
        if (index == 0) {
    
            for(int i = 0; i < from.length; i++) {
                newArray[index++] = from[i];
            }
            newArray[ from.length ] = to[ originalIndex + 1 ];
    
        } else {
    
            int j = 0;
            while ( j<originalIndex ) {
                newArray[j] = to[j];
                j++;
            }
    
            for (int i = 0; i<from.length; i++) {
                newArray[ index++ ] = from[i];
            }
        }
        //System.arraycopy(to, originalIndex + 1, newArray, originalIndex + (from.length), to.length - 1);
        System.out.println("NEWARRAY: "+Arrays.toString(newArray));
        return newArray;
    }