1
field = new int[input.Width][][]; 

for (int x = 0; x < input.Width; x++) 
{ 
     field[x] = new int[input.Height][]; 

     for (int y = 0; y < 3; y++) 
     { 
      field[x][y] = new int[3]; 
     } 
} 

出於某種原因,上面的代碼是給我超出範圍的異常,但以下工作正常:初始化在C#中交錯數組給出索引超出範圍例外

field = new int[input.Width][][]; 

for (int x = 0; x < input.Width; x++) 
{ 
     field[x] = new int[input.Height][]; 

} 

for (int y = 0; y < input.Height; y++) 
{ 

     for (int x = 0; x < input.Width; x++) 
     { 
      field[x][y] = new int[3];     

      field[x][y][0] = random.Next(0, output.Width); 
      field[x][y][1] = random.Next(0, output.Height); 
      field[x][y][2] = MaskFunctions.DSCALE; 

     } 
} 

任何人都可以指出什麼是我做錯了?

另外:超出範圍和超出界限異常之間是否有區別?

+0

第一已回答'y <3',第二個回答'y ps2goat

+0

@ ps2goat是的,他們做!但你看到它在這裏4點半:) –

回答

4

您的內循環從0變爲3,而不是0變爲input.Height。這會在input.Height < 3時產生超出範圍的例外。

你可能打算這樣做:

field = new int[input.Width][][]; 

for (int x = 0; x < input.Width; x++) 
{ 
     field[x] = new int[input.Height][]; 

     for (int y = 0; y < input.Height; y++) 
     { 
      field[x][y] = new int[3]; 
     } 
} 
+0

謝謝!有效!你是否也可以告訴我超出範圍和超出範圍之外是否有區別? –

+0

@AliZahid至少在這種情況下,沒有任何區別。有些人只是喜歡用不同的語言。 .NET將它稱爲['IndexOutOfRangeException'](http://msdn.microsoft.com/en-us/library/system.indexoutofrangeexception.aspx),但Java將其稱爲['ArrayIndexOutOfBoundsException'](http:// docs。 oracle.com/javase/7/docs/api/java/lang/ArrayIndexOutOfBoundsException.html)。無論哪種情況,他們的意思都基本相同。 –