這是我從列表中刪除記錄的代碼,但我似乎無法讓它工作。有什么建議么?public void deleteRecord (Scanner in){ int delete = 0; showRecords(); System.out.println("Enter the number in the list to delete:"); delete = in.nextInt(); delete = delete -1; for (int i = delete; i < this.size; i++) { this.collection[i] = this.collection[i + 1]; this.collection[size] = null; this.size--; System.out.println("Record deleted successfully"); showRecords(); } System.out.println("Please enter a number in the list to delete");}
2 回答

守候你守候我
TA貢獻1802條經驗 獲得超10個贊
你減少了size太多次。它應該只在你移動循環中的元素后完成一次for。
還要注意for循環條件。由于您在循環內部使用,i + 1您只能循環直到i < size - 1或者您將嘗試訪問數組大小之外的元素。
int toDelete = in.nextInt(); // assume it's between 0 and size - 1
for (int i = toDelete; i < size - 1; i++) {
collection[i] = collection[i + 1];
}
collection[size] = null;
size--;

慕容3067478
TA貢獻1773條經驗 獲得超3個贊
在這種情況下,我想您有義務使用數組操作來完成工作,
不過,就個人而言,我會通過使用完全避免循環System.arraycopy():
System.arraycopy(this.collection, deletionIndex, this.collection, deletionIndex + 1,
? ? ? ? this.size - (deletionIndex + 1));
this.size--;
較短的代碼往往意味著較少的錯誤,并且該特定代碼至少與原始循環一樣清晰,至少對我而言。此外,如果沒有循環,就沒有機會將不屬于循環的語句放入循環中,這是原始代碼的主要問題。
添加回答
舉報
0/150
提交
取消