[英]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.