向IntegerList類添加一個方法void removeFirst(int newVal),該方法從列表中刪除第一個值。如果該值沒有出現在列表中,它應該什麼也不做(但它不是錯誤)。刪除一個項目不應該改變數組的大小,但是請注意數組的值需要保持連續,所以當你刪除一個值時,你必須將所有的東西都移回來填滿它的空間。還要記住減少跟蹤元素數量的變量。如何刪除數組中元素值的第一個實例?
請幫忙,我已經嘗試了本網站上列出的所有關於「從數組中刪除元素」的其他解決方案,但都沒有工作。
向IntegerList類添加一個方法void removeFirst(int newVal),該方法從列表中刪除第一個值。如果該值沒有出現在列表中,它應該什麼也不做(但它不是錯誤)。刪除一個項目不應該改變數組的大小,但是請注意數組的值需要保持連續,所以當你刪除一個值時,你必須將所有的東西都移回來填滿它的空間。還要記住減少跟蹤元素數量的變量。如何刪除數組中元素值的第一個實例?
請幫忙,我已經嘗試了本網站上列出的所有關於「從數組中刪除元素」的其他解決方案,但都沒有工作。
你可以這樣做:
int count; //No of elements in the array
for(i=0;i<count;i++)
{
if(Array[i]==element)
{
swap(Array,i,count);
if(count)
--count;
break;
}
}
int swap(int Array[],int i,int count)
{
int j;
for(j=i;j<=count-i;j++)
a[i]=a[i+1];
}
這不是完全Implementation.You必須創建一個類,並做到這一點。
+0:這會起作用,但相當昂貴。交換可以稱爲洗牌。 ;)'if(count)'不能編譯或做任何事情。 – 2011-04-03 05:51:08
在這種情況下應該使用'System.arraycopy' – 2011-04-03 08:04:29
此方法支持與Collection.remove()相同的功能,這是ArrayList移除第一個匹配元素的方式。
public boolean remove(int n) {
for (int i = 0; i < size; i++) {
if (array[i] != n) continue;
size--;
System.arraycopy(array, i + 1, array, i, size - i);
return true;
}
return false;
}
而不是你自己寫的代碼,我建議你看看Trove4J的TIntArrayList
這是int[]
的包裝還可以閱讀代碼的ArrayList,看看它是怎麼寫的。
閱讀這個問題,它說:「當你刪除一個值,你將不得不把它轉移一切,以填補它的空間」。你明白這句話的意思嗎?這是您解決方案的關鍵。 – 2011-04-03 05:09:08
如果人們知道你正在編程什麼語言,答案可能會更容易......數據結構實際上是一個數組嗎?或者是一個鏈表? – 2011-04-03 05:10:32
它是一個數組,而不是一個鏈表。這在java中。我假設這意味着其餘元素的索引必須從0到array.length保持連續。 – 2011-04-03 05:23:38