[英]Unity 2D Jagged Array , Array index is out of range
我有这个二维数组,它给我一个数组索引超出范围 ,问题。 此问题的原因是什么,我该如何解决?
编辑 :是的,对此感到抱歉。 我将在这里包括我想做的事情:
所以即时通讯试图使锯齿数组。 所以我有很多platforms
,我想通过numOfPlatforms
,每个平台都有它的Size
,它的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);
}
}
}
在外部for循环的第一个迭代中, randomXPosSegments = new int[a][]
由于a = 0
创建了一个“空”数组。 然后,当您尝试访问该数组的“第0个”(即第一个)元素时,由于没有位置[0]
可供访问,它将引发该异常。
要创建一个包含一个元素的数组,您需要声明其大小为1
:
var singleElementArray = new int[1];
singleElementArray[0] = 42;
Debug.WriteLine(singleElementArray[0]); // Prints '42'
如果将其大小设置为0
。 没有要分配给的“第0”个职位:
var singleElementArray = new int[0];
singleElementArray[0] = 42; // Throws IndexOutOfRangeException
我不确定如何帮助您解决此问题,因为您没有解释您要完成的工作,并且现有代码没有意义(例如,您有一个从未使用过的迭代器b
,请继续设置randomXPosSegments[a]
到一个新的空数组)。
编辑:
首先要注意以下几点:
0.5
十进制值, randomXPosSegments
将需要是一个double
数组,而不是int
。 我们还需要在循环之外创建此数组,否则我们将在每次迭代中继续创建一个新的空数组。 同样,您需要在内部for循环之外初始化randomXPosSegments[a]
,否则每次都将其重置。 GetRandomXSize()
函数,因为现在它的值永远不会改变。 randomXSize - (0.5 * b)
来获取值randomXSize - (0.5 * b)
7, 6.5, ...
b
将从0
开始,因此在第一次迭代中,它将只是randomXSize
。 然后,它每次通过循环都会减去0.5
。 0
作为锯齿状数组中的最后一个结果,我必须将内部for循环的条件更改为b <= randomXSizeSegments
,并确保将其初始化为足够大以适合结果(请注意, new double[randomXSizeSegments + 1]
+1
new double[randomXSizeSegments + 1]
)。 这是对我有用的代码。
var randomXPosSegments = new double[numOfPlatforms][];
for(int a = 0; a < numOfPlatforms; a = a + 1) {
var randomXSize = GetRandomXSize();
var randomXSizeSegments = randomXSize * 2;
randomXPosSegments[a] = new double[randomXSizeSegments + 1];
for(int b = 0; b <= randomXSizeSegments; b = b + 1) {
randomXPosSegments[a][b] = randomXSize - (0.5 * b);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.