Java strandSort作业,迭代器问题?
这是我家庭作业问题的一部分 我们获得了strandsort的以下伪代码:Java strandSort作业,迭代器问题?,java,Java,这是我家庭作业问题的一部分 我们获得了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 inor
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;
但是,我在forInteger I:nums行中遇到了一个越界错误。我相信我知道为什么会这样。我试图遍历列表,同时从列表中删除元素
我不确定的是如何修复它。如果我正确地实现了伪代码,我相信它不会遇到这样的错误。因此,我认为我没有正确地实施它
如果有,在不破坏输入列表的情况下重做strandSort代码的最佳方法是什么
我为双重张贴道歉,我不小心在解释完之前提交了问题 toAdd=nums.removeinti;是你的罪魁祸首
从:
清除指数
删除此列表中指定位置的元素可选操作
布尔移除对象
如果指定元素是可选操作,则从此列表中删除该元素的第一个匹配项
这很令人困惑,因为您正在将整数强制转换为int,从而导致调用remove的第一个版本。这会导致代码删除i处的元素,而不是i本身。尝试摆脱显式int强制转换
不一样
if i >= last item in inorder
在第一种情况下,您得到的是第一个,而不是最后一个。您确定nums.removeinti行中没有异常吗?如果不使用int类型,还会发生这种情况吗?我问这个问题的原因是remove方法有两个版本——一个是传递要删除的实际对象,另一个是传递一个int,指定要删除的对象在列表中的位置。显然,你想要前者;但是通过指定参数为int,您可能得到了错误版本的remove方法。正如我在您的重复文章中所说的,请不要这样做,而是编辑您的问题。你不能在for循环中得到这个异常,它在你的remove中,这是我前面提到的原因。编译告诉我这是for循环行,但我意识到当我从列表中删除一个元素时,问题就真正开始了。如果我删除int强制转换,程序将不会编译,因为remove会返回一个布尔值。*要调用的remove的第一个版本。
if i >= last item in inorder