我有一个有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));
答案 0 :(得分:0)
您永远不会将to
数组中的任何值复制到newArray
。您需要复制索引前面的元素和from
数组内容后面的元素。
答案 1 :(得分:0)
如果实例化的数组[0,4,0]是预设的,你可以用其他数组信息(IE from.length [0])替换数组的第0和第2个索引,它似乎永远不会复制值结束了。
答案 2 :(得分:0)
由于您要保留to[]
数组的值,因此必须确保在该数组中跟踪剩余值(替换后)。这取决于index
。为此,您可以使用分支将问题分成两部分:
depositElements
方法实现(使用originalIndex变量)稍作更改后,您就可以得到结果。 originalIndex
变量,因为索引本身在代码中发生了变化。 这是您实现代码的方法:
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;
}