到达数组末尾后跳转到数组开头

时间:2019-06-12 14:02:44

标签: c# arrays

我试图弄清楚到达终点后如何跳到数组的起点。

基本上,我的代码有多个充满石头的孔,如果您选择一个孔,则该孔中的所有石头都将被带走并每次分布在以下孔1中。

现在,如果到达最后一个孔,则应从阵列的开头开始,然后将剩余的石头放在孔的开头。

不幸的是,我现在得到的只是一条错误消息,指出

  

System.IndexOutOfRangeException:'索引超出了   数组。”

到目前为止,我在此特定代码中的代码是:

for (int i = chosenHoleInt; i <= stonesOnChosenField + chosenHoleInt; i++)
{
    board.holes[chosenHoleInt].Stones--;

    board.holes[i].Stones++;

    if (chosenHoleInt > board.holes.Length)
    {
        chosenHoleInt = 0;
    }
}

我认为我可以通过实现board.holes.length部分来解决问题,但是显然那根本行不通。 任何帮助将不胜感激,因为我仍在学习中,并且现在还处于停滞状态。 :)

2 个答案:

答案 0 :(得分:1)

我会做这样的事情:

int i = chosenHoleInt;
        while(Board.Holes[chosenHoleInt].Stones != 0)
        {
            if (i >= Board.Holes.Length)
            {
                i = 0;
                continue;
            }

            Board.Holes[chosenHoleInt].Stones--;
            Board.Holes[i].Stones++;
            i++;
        }

答案 1 :(得分:0)

此示例应为您工作:

 for (int i = chosenHoleInt; i < stonesOnChosenField + chosenHoleInt; i++)
 {
        if (chosenHoleInt >= board.holes.Length || i >= board.holes.Length)
        {
            chosenHoleInt = 0;
            continue;
        }

        board.holes[chosenHoleInt].Stones--;


        board.holes[i].Stones++;
 }
如注释中所述,

您应该首先检查索引是否在数组的边界内,然后尝试访问它。另外,您还需要在循环中的边界检查中进行一些更改