これは私の宿題の一部です。
以下のストランドソートの疑似コードが与えられました。
    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 コードを作り直す最良の方法は何ですか?
(二重投稿で申し訳ありません。説明が終わる前に誤って質問を送信してしまいました!)