C# Unity 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;

我有一个2D数组,它给了我一个数组索引,这个数组超出了范围。此问题的原因是什么?我如何解决此问题

编辑:是的,很抱歉。我将在这里介绍我想做的事情:

所以我试着制作锯齿状的阵列。 所以我有很多
平台
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
    数组,而不是
    int
    。我们还需要在循环之外创建它,否则我们将在每次迭代中继续创建一个新的空数组。像wise一样,您需要在内部for循环之外初始化
    randomXPosSegments[a]
    ,或者每次都重置它
  • 我创建了一个
    GetRandomXSize()
    函数,因为现在它的值从未改变
  • 在内部for循环中,我使用
    randomXSize-(0.5*b)
    来获得类似
    7、6.5、
    的值
    b
    将以
    0
    开始,因此在第一次迭代中,它将是
    randomXSize
    。然后它将在每次通过循环时减去a
    0.5

  • 为了得到锯齿状数组中的最后一个结果
    0
    ,我必须将内部for循环的条件更改为
    b我更新了我的答案,以响应您对尝试实现的解释。