簡體   English   中英

如何在Java中將數組元素上移一個位置?

[英]How do I shift array elements up one position in java?

我正在進行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);
}   

您要迭代直到anArray.length (不包括),但是在循環內部,您正在訪問anArray[j + 1] ,因此它將在最后一次迭代中等於anArray[anArray.length] ,這將導致ArrayIndexOutOfBoundsException 。

迭代直到anArray.length - 1 (不包括),並確定應在數組的最后一個元素中存儲什么而不是其先前值。

您也將從anArray[positionToDelete] - 1開始,而不是從positionToDelete開始。

您那里有兩個錯誤。

由於這是一項作業,因此我不會給出完整的答案-只是一個提示。 您的循環定義是錯誤的。 考慮一下:在循環的第一次和最后一次迭代中會發生什么? 想象一下一個5元素的數組(按照Java規則編號為0到4),並在擦除元素編號(例如2)時在循環的迭代中計算出變量的值。

使用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 
}
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 ++樣式的數組:一個數組及其“已用長度”。

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
}

這個怎么樣 ? 請注意注釋,我認為您不能刪除數組中的元素,而只需用其他東西替換它,這可能會有用: 從數組(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;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM