2013-11-28 51 views
0

我有代碼從數組中刪除一個條目,然後將所有元素向下移動一個索引,以便將空的空間留在數組的末尾。問題是數組中的最後一個條目被複制到已刪除的索引中。數組刪除 - 最後一個條目重複

這是當輸入所有記錄的數組:

[entryOne, entryTwo, entryThree, entryFour, entryFive, entrySix, entrySeven, entryEight, entryNine, entryTen]

然後我跑我的代碼刪除索引5和打印陣列,這就是表示:

[entryOne, entryTwo, entryThree, entryFour, entryFive, entrySeven, entryEight, entryNine, entryTen, entryTen]

我怎樣才能得到最終的索引被清空?

添加記錄代碼:

static void addStudent() { 
    if (nameArrayCount < 10) { 
     System.out.println("Enter the student's name in the following format - surname, forename: "); 
     studentName = input.next(); 
     studentNamesArray[nameArrayCount] = studentName; 
     nameArrayCount = nameArrayCount + 1; 
    } 
    else if (nameArrayCount == 10) { 
     System.out.println("******Array is full, please delete a student before adding another.*****"); 
    } 
    if (markArrayCount < 10){ 
    System.out.println("Enter the first mark: "); 
      markOne = input.nextInt(); 
      System.out.println("Enter the second mark: "); 
      markTwo = input.nextInt(); 
      System.out.println("Enter the third mark: "); 
      markThree = input.nextInt(); 
      studentMarksArray[markArrayCount][0] = markOne; 
      studentMarksArray[markArrayCount][1] = markTwo; 
      studentMarksArray[markArrayCount][2] = markThree; 
      markArrayCount = markArrayCount + 1; 
    } 
    } 

刪除記錄代碼:

static void deleteStudent() { 
    System.out.println("Which student would you like to delete?"); 
    for(int i=0;i<10;i++) { 
     System.out.println(i + ": " + studentNamesArray[i]); 
    } 
    int studentChoice = input.nextInt(); 
    for(int i = studentChoice+1; i<studentNamesArray.length; i++) { 
     studentNamesArray[i-1] = studentNamesArray[i]; 
    } 
    nameArrayCount = nameArrayCount -1; 
    } 
+1

假設您的數組保存對象或字符串,請將最後一個設置爲null。但無法調整數組大小。你有沒有考慮過使用List? – Taylor

回答

5

您必須手動將其設置爲null

for(int i = studentChoice+1; i<studentNamesArray.length; i++) { 
     studentNamesArray[i-1] = studentNamesArray[i]; 
} 

studentNamesArray[studentNamesArray.length - 1] = null; 

如果你打算這麼做,你可能會想用ArrayList來代替。移除/添加數值會更好。還有一個toArray()方法可用,它將允許您以真正需要的數組形式返回它(我不希望此代碼示例使用許多學生入口,這將是一個昂貴的操作)。

+0

如果對於任何情況,不應該使用列表,可以使用'System.arraycopy'將數組複製到一個較小的列表中。 –

+0

謝謝,我會在時限到期時接受。 – Colin747

相關問題