2015-08-21 175 views
-1

對於數組中的每個填充了隨機整數的元素,我需要將前一個元素的值添加到當前元素中。如何將前一個數組元素的值添加到當前元素中

這是我的代碼:

class Program 
    { 
     static void Main(string[] args) 
     { 
      int[] numbers = new int[10]; 
      Random generator = new Random(); 
      for (int i = 0; i < numbers.Length; i++) 
      { 
       numbers[i] = generator.Next(0, 100); 
      } 

      for (int i = 0; i < numbers.Length; i++) 
      { 
       Console.Write("{0} ", numbers[i]); 
      } 
      Console.WriteLine(); 

      for (int i = 0; i < numbers.Length+1; i++) 
      { 
       Console.Write("{0} ", numbers[i]); 
       numbers[i + 1] += numbers[i]; 
      } 

(從評論)它不能正常工作。我做了一些更改,但仍然在最後一個值後出現IndexOutOfRangeException。它必須是10個隨機值作爲輸入,10個用於輸出。但代碼只能正確工作到9個值的輸出。

+2

你的代碼工作?它會產生編譯時錯誤嗎?你在尋找替代方法嗎?解決方案有沒有限制? - 真的很難看到你尋求什麼樣的幫助。 –

+0

它無法正常工作。我做了一些更改,但仍然在最後一個值後出現IndexOutOfRangeException。它mut作爲10個隨機值作爲輸入,10個作爲輸出。但代碼只能正確工作到9個值的輸出。 – Milenita

+0

Milenita,請務必直接更改帖子,而不是回覆評論。這樣,問題就會變得更好(並且副作用會因爲「新編輯」而被碰撞,所以更多的人可以看到它 –

回答

2

你有一個錯誤在您的最終循環:

for (int i = 0; i < numbers.Length + 1; i++) 
    numbers[i + 1] += numbers[i]; 

這將導致numbers[i + 1]拋出IndexOutOfRangeException最後兩次迭代。相反,使用以下停在最後一個元素:

for (int i = 0; i < numbers.Length - 1; i++) 
    numbers[i + 1] += numbers[i]; 

另一個潛在的問題是,每一個元素將已經被概括其前身(S)通過它讀取更新其繼任者的時間。如果你只是想添加的前任的價值,反轉你的循環流量:

for (int i = numbers.Length - 1; i > 0; i--) 
    numbers[i] += numbers[i - 1]; 

編輯:如果你想輸出數組中的新值作爲同一循環的一部分,你可以像這樣適應它:

for (int i = numbers.Length - 1; i >= 0; i--) 
{ 
    if (i > 0) 
     numbers[i] += numbers[i - 1]; 
    Console.Write("{0} ", numbers[i]); 
} 

注意,第一數目(索引0)不具有它的值改變(因爲沒有前任要添加到它);它只是印有其舊的價值。

+0

現在只有輸出元素是9而不是10.如何才能做到這一點,而不會拋出異常IndexOutOfRange? – Milenita

+0

@Milenita:Check最終編輯。 – Douglas

相關問題