我试图弄清楚到达终点后如何跳到数组的起点。
基本上,我的代码有多个充满石头的孔,如果您选择一个孔,则该孔中的所有石头都将被带走并每次分布在以下孔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部分来解决问题,但是显然那根本行不通。 任何帮助将不胜感激,因为我仍在学习中,并且现在还处于停滞状态。 :)
答案 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++;
}
如注释中所述,您应该首先检查索引是否在数组的边界内,然后尝试访问它。另外,您还需要在循环中的边界检查中进行一些更改