2 回答

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超10個(gè)贊
你減少了size太多次。它應(yīng)該只在你移動(dòng)循環(huán)中的元素后完成一次for。
還要注意for循環(huán)條件。由于您在循環(huán)內(nèi)部使用,i + 1您只能循環(huán)直到i < size - 1或者您將嘗試訪問數(shù)組大小之外的元素。
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--;

TA貢獻(xiàn)1773條經(jīng)驗(yàn) 獲得超3個(gè)贊
在這種情況下,我想您有義務(wù)使用數(shù)組操作來完成工作,
不過,就個(gè)人而言,我會(huì)通過使用完全避免循環(huán)System.arraycopy():
System.arraycopy(this.collection, deletionIndex, this.collection, deletionIndex + 1,
? ? ? ? this.size - (deletionIndex + 1));
this.size--;
較短的代碼往往意味著較少的錯(cuò)誤,并且該特定代碼至少與原始循環(huán)一樣清晰,至少對(duì)我而言。此外,如果沒有循環(huán),就沒有機(jī)會(huì)將不屬于循環(huán)的語句放入循環(huán)中,這是原始代碼的主要問題。
添加回答
舉報(bào)