2015-12-03 95 views
0

我想顛倒一個數組。這是我的代碼:索引超出範圍的例外

using System; 

class Hello 
{ 
    static void Main() 
    { 
     int[] num = new int[] { 1, 2, 3, 4, 5 }; 
     int index = num.Length - 1; 
     int[] newNum = new int[index]; 

     for (int i = 0; i < num.Length; i++) 
     { 
      newNum[i] = num[index]; // error  
      index--;   
      Console.WriteLine(newNum[i]); 
     } 
     Console.ReadLine(); 
    } 
} 

當我運行代碼,控制檯打印

5 
4 
3 
2 

,然後返回一個錯誤:上線

IndexOutOfRangeException was unhandled

newNum[i] = num[index]; 

這行代碼有什麼問題?當我在循環之前打印num[0]時,它工作正常。

新陣列的
+7

嗯,是的,你的'newNum'陣列是一個元素比你'num'陣列規模較小,但你的循環寫,如果是相同的長度'num'。你爲什麼這樣做? –

+0

爲什麼不使用Enumerable.Reverse? [鏈接](https://msdn.microsoft.com/library/bb358497(v = vs.100).aspx) –

+2

@croxy:請勿刪除相關代碼。 'System'命名空間的'using'指令對於編譯代碼是必要的。 –

回答

0

長度爲4。這意味着我會從0至覆蓋3

int[] newNum = new int[index]; 

和你的循環會去我= 4

的時候我會4您的代碼將崩潰。因爲newNum只支持第三個索引。

這應該是

int[] newNum = new int[index+1];