Java 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

这是我家庭作业问题的一部分

我们获得了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;
但是,我在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