這是我的一個家庭作業問題的一部分。strandSort作業,迭代器問題?
我們分別給予strandsort以下僞代碼:
define strandSort(L)
result = []
while len(L) > 0
inorder = []
remove first element of L, add it to inorder
for each item i in L:
if i >= last item in inorder
remove i from L, add it to inorder
result = merge(inorder,result)
return result
我實現了代碼的程序如下:
public List<Integer> strandSort(List<Integer> nums) {
List<Integer> result = new ArrayList<Integer>();
while(nums.size() > 0){
List<Integer> inorder = new ArrayList<Integer>();
int toAdd = nums.remove(0);
inorder.add(toAdd);
for(Integer i : nums){
if (i >= inorder.get(0)){
toAdd = nums.remove((int)i);
inorder.add(toAdd);
}
}
result = merge(inorder, result);
}
return result;
不過,我碰到一個出界錯誤的「 for(Integer i:nums)「行。我相信我明白爲什麼會發生這種情況。我試圖遍歷列表,同時從中刪除元素。
我不確定的是如何解決它。如果我正確實現了僞代碼,我不相信它會遇到像這樣的錯誤。因此,我認爲我沒有正確實施它。
如果我有,在不破壞輸入列表的情況下重寫strandSort代碼的最佳方法是什麼?
(我很抱歉雙張貼,我不小心提交問題之前,我解釋完了!)
你確定這個異常不在'nums.remove((int)i)'行嗎?如果你不把'(int)'強制轉換,它還會發生嗎?我問的原因是有兩個版本的'remove'方法 - 一個是傳遞想要移除的實際東西,另一個是傳遞'int'的另一個方法,指定列表中要移除的東西的位置很顯然,你想要前者;但是通過指定參數是一個'int',你可能會得到'remove'方法的錯誤版本。 –
我在你的重複帖子中說過的同一件事 - 請不要這樣做,而是編輯你的問題。你不能在'for'循環中得到這個異常,因爲我之前說過,它在你的'remove'中。 –
編譯告訴我這是for循環行,但我意識到,當我從列表中刪除問題真正開始的元素時。 如果我刪除int cast,程序將不會編譯,因爲remove()會返回一個布爾值。 – user2860419