我正在进行java分配,我需要删除数组中的整数元素,并将下面的元素向上移动以保持它们的顺序。该数组目前是降序的随机整数。我不允许使用array.copy,因为我需要收集数组使用信息作为赋值的一部分。我已经尝试了很多不同的方法,但似乎无法让它发挥作用。
public static void deletionArray(int anArray[], int positionToDelete) {
for (int j = anArray[positionToDelete] - 1; j < anArray.length; j++) {
System.out.println("j is " + j);
anArray[j] = anArray[j + 1];
}
displayArray(anArray);
}
答案 0 :(得分:2)
您正在迭代直到anArray.length
(独占),但在循环内,您正在访问anArray[j + 1]
,因此最后会等到anArray[anArray.length]
迭代,这将导致ArrayIndexOutOfBoundsException。
迭代直到anArray.length - 1
(不包括),并决定应该在数组的最后一个元素中存储什么,而不是它以前的值。
您也是从anArray[positionToDelete] - 1
开始,而不是从positionToDelete
开始。
答案 1 :(得分:1)
你有两个错误。
由于这是一项任务,我不会给出完整的答案 - 只是一个提示。你的循环定义是错误的。想一想:在循环的第一次和最后一次迭代中会发生什么?想象一个5元素数组(根据Java规则编号为0到4),并在擦除元素编号(例如2)时计算循环迭代的变量值。
答案 2 :(得分:0)
比循环更快地使用System.arraycopy
:
public static void deletionArray( int anArray[], int positionToDelete) {
System.arraycopy(anArray, positionToDelete + 1, anArray,
positionToDelete, anArray.length - positionToDelete - 1);
//anArray[length-1]=0; //you may clear the last element
}
答案 3 :(得分:0)
public static int[] deletionArray(int anArray[], int positionToDelete) {
if (anArray.length == 0) {
throw new IlligalArgumentException("Error");
}
int[] ret = new int[anArray.length - 1];
int j = 0;
for (int i = 0; i < anArray.length; ++i) {
if (i != positionToDelete) {
ret[j] = anArray[i];
++j;
}
}
return ret;
}
我们为什么要预订新阵列?
因为如果不这样做,我们会使用C \ C ++ - 样式数组:一个数组和一个&#34;使用的长度&#34;它的。
public static int deletionArray(int anArray[], int positionToDelete, int n) {
if (n == 0) {
throw new IlligalArgumentException("Error");
}
for (int i = positionToDelete; i < n - 1; ++i) {
anArray[i] = anArray[i + 1];
}
return n - 1; // the new length
}
答案 4 :(得分:0)
这是怎么回事?请注意评论,我认为您不能删除数组中的元素,只需将其替换为其他元素,这可能很有用:Removing an element from an Array (Java)
更新了'JB Nizet'评论:
public class Driver {
public static void main (String args []){
int intArray[] = { 1,3,5,6,7,8};
int updatedArray[] = deletionArray(intArray , 3);
for (int j = 0; j < updatedArray.length; j++) {
System.out.println(updatedArray[j]);
}
}
public static int[] deletionArray(int anArray[], int positionToDelete) {
boolean isTrue = false;
for (int j = positionToDelete; j < anArray.length - 1; j++) {
if(j == positionToDelete || isTrue){
isTrue = true;
anArray[j] = anArray[j + 1];
}
}
anArray[anArray.length-1] = 0; //decide what value this should be or create a new array with just the array elements of length -> anArray.length-2
return anArray;
}
}