C# Unity 2D锯齿数组,数组索引超出范围
我有一个2D数组,它给了我一个数组索引,这个数组超出了范围。此问题的原因是什么?我如何解决此问题 编辑:是的,很抱歉。我将在这里介绍我想做的事情: 所以我试着制作锯齿状的阵列。 所以我有很多C# Unity 2D锯齿数组,数组索引超出范围,c#,for-loop,unity3d,multidimensional-array,jagged-arrays,C#,For Loop,Unity3d,Multidimensional Array,Jagged Arrays,我有一个2D数组,它给了我一个数组索引,这个数组超出了范围。此问题的原因是什么?我如何解决此问题 编辑:是的,很抱歉。我将在这里介绍我想做的事情: 所以我试着制作锯齿状的阵列。 所以我有很多平台,numOfPlatforms 我想浏览一下,每个平台都有其大小,即随机XSize。 现在,我想在每个平台上标记一个点,每0.5,这就是为什么我要 (randomXSize - 0.5) 但我不知道我需要做多少次,所以我做了 randomXSizeSegments = randomXSize * 2;
平台
,numOfPlatforms
我想浏览一下,每个平台都有其大小
,即随机XSize
。
现在,我想在每个平台上标记一个点,每0.5,这就是为什么我要
(randomXSize - 0.5)
但我不知道我需要做多少次,所以我做了
randomXSizeSegments = randomXSize * 2;
要计算每个randomXSize
将有多少个0.5
换句话说,
如果第一个平台“0”的随机XSIZE为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
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);
}
}
}
如果第二个平台“1”的randomXSize
值为7
我希望数组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
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);
}
}
}
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
无效调试_One(){
对于(int a=0;a
在外部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
。我们还需要在循环之外创建它,否则我们将在每次迭代中继续创建一个新的空数组。像wise一样,您需要在内部for循环之外初始化int
,或者每次都重置它randomXPosSegments[a]
- 我创建了一个
函数,因为现在它的值从未改变GetRandomXSize()
- 在内部for循环中,我使用
来获得类似randomXSize-(0.5*b)
的值7、6.5、
将以b
开始,因此在第一次迭代中,它将是0
。然后它将在每次通过循环时减去arandomXSize
0.5
- 为了得到锯齿状数组中的最后一个结果
,我必须将内部for循环的条件更改为0
b我更新了我的答案,以响应您对尝试实现的解释。