2015-08-21 142 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

相关问题