我有这个2D数组,它给我一个数组索引超出范围,问题。这个问题的原因是什么,我该如何解决?
编辑:是的,对不起。我将在这里包括我想要做的事情:
所以我试图制作锯齿状数组。
所以我有一些platforms
,numOfPlatforms
我想通过它们,每个平台的Size
都是randomXSize
。
而现在,我想在每个平台上标记一个点,每0.5个,这就是我做的原因
(randomXSize - 0.5)
但我不知道为了这么做我需要做多少次
randomXSizeSegments = randomXSize * 2;
计算每个randomXSize
的数量为0.5。
换句话说, 如果第一个平台'0'的randomXSize为3
我希望数组randomXSizeSegments
看起来像这样
randomXSizeSegments[1][0] = 3
randomXSizeSegments[0][1] = 2.5
randomXSizeSegments[0][2] = 2
randomXSizeSegments[0][3] = 1.5
randomXSizeSegments[0][4] = 1
randomXSizeSegments[0][5] = 0.5
randomXSizeSegments[0][6] = 0
如果第二个平台'1'的randomXSize
为7
我希望数组randomXSizeSegments
看起来像这样
randomXSizeSegments[1][0] = 7
randomXSizeSegments[1][1] = 6.5
randomXSizeSegments[1][2] = 6
randomXSizeSegments[1][3] = 5.5
randomXSizeSegments[1][4] = 5
randomXSizeSegments[1][5] = 4.5
randomXSizeSegments[1][6] = 4
randomXSizeSegments[1][7] = 3.5
randomXSizeSegments[1][8] = 3
randomXSizeSegments[1][9] = 2.5
randomXSizeSegments[1][10] = 2
randomXSizeSegments[1][11] = 1.5
randomXSizeSegments[1][12] = 1
randomXSizeSegments[1][13] = 0
void Debugging_One() {
for(int a = 0; a < numOfPlatforms; a = a + 1) {
randomXPosSegments = new int[a][];
randomXSizeSegments = randomXSize * 2;
//Debug.Log(a);
//Debug.Log(randomXSizeSegments);
for(int b = 0; b < randomXSizeSegments; b = b + 1) {
// randomXPosSegments[a][b] = 0;
randomXPosSegments[a] = new int[] {(int)(randomXSize - 0.5)};
//Debug.Log(b);
}
}
}
答案 0 :(得分:1)
在外部for循环的第一次迭代中,randomXPosSegments = new int[a][]
创建一个&#34;空的&#34;自a = 0
以来的数组。然后,当您尝试访问&#34; 0th&#34; (即第一个)该数组的元素,它抛出该异常,因为没有位置[0]
可以访问。
要创建包含一个元素的数组,您需要声明它的大小为1
:
var singleElementArray = new int[1];
singleElementArray[0] = 42;
Debug.WriteLine(singleElementArray[0]); // Prints '42'
如果你给它的大小为0
。没有&#34; 0th&#34;存在的位置分配给:
var singleElementArray = new int[0];
singleElementArray[0] = 42; // Throws IndexOutOfRangeException
我不确定如何帮助您解决这个问题,因为您还没有解释您要完成的任务以及现有代码没有意义(例如,您有一个迭代器{{1}你永远不会使用,你继续将b
设置为一个新的空数组。
修改强>
首先要做的几件事:
randomXPosSegments[a]
这样的小数值,0.5
需要是randomXPosSegments
而不是double
的数组。我们还需要在循环外创建它,或者我们将在每次迭代时继续创建一个新的空数组。同样明智的做法是,您需要在内部for循环之外初始化int
,否则您每次都会重置它。randomXPosSegments[a]
函数,因为它现在的值永远不会改变。GetRandomXSize()
获取randomXSize - (0.5 * b)
之类的值。 7, 6.5, ...
将从b
开始,因此在第一次迭代时,它将只是0
。然后它会在每次循环时减去randomXSize
。0.5
作为锯齿状数组中的最后一个结果,我必须将内部for循环的条件更改为0
,并确保将其初始化为足够大以适合结果(注意b <= randomXSizeSegments
中的+1
)。这是适用于我的代码。
new double[randomXSizeSegments + 1]