有人可以向我解释为什么它会抛出 ArgumentOutOfRangeException 吗?

Can someone explain me why it throws an ArgumentOutOfRangeException?

static List<object> JosephusPermutation(List<object> items, int k)
{
  List<object> solution = new List<object>();
  int index = k - 1;
  int len = items.Count;
  int count = 1;
  foreach(object i in items){
    if(index<len){
      solution.Add(items[index]);
      index += k;
    }
    else{
      index = (index - 1) - len * count;
      count++;
    }
  }
  return solution;
}

我试图创建一个函数,它获取数组中的每个 k 元素并得到一个 OutOfRangeException,但不知道为什么会这样。你能解释一下为什么这些代码会这样吗?感谢您的帮助!

这一行是原因:

index = (index - 1) - len * count;

一旦 count > 1,您将减去一个大于列表长度的数字,从而导致负索引。删除 * count 应该可以解决这个问题。