C#如何在循环中实现当前迭代值与上一次迭代值累加
问题根因
你的代码运行结果异常,是两处写法错误导致的:
- 循环内部写了
i++语句:执行到int y = input[i++];时会额外给循环索引自增1,等于每次循环直接跳过2个元素,不仅取值完全错位,还可能触发索引越界异常,根本拿不到上一次迭代的目标值 - 没有单独存储上一轮迭代的有效值:直接在循环内靠索引偏移取值的方式,既没法正确关联跨轮次的计算结果,也无法适配累加逻辑的状态留存需求
正确实现
根据两种常见的累加需求,对应实现如下:
- 需求1:每轮计算「当前迭代元素 + 上一轮迭代的累加结果」(即输出前缀累计和)
int[] input = { 28, 2, 3, -3, -2, 1, 2, 35, -1, 0, 0, -1 }; // 初始化存储上一轮迭代值的变量,首元素无前置累加值,初始值设为0即可 int lastSum = 0; for (int i = 0; i < input.Length; i++) { int current = input[i]; int output = current + lastSum; Console.WriteLine(output); // 将当前轮结果存为上一轮值,供下一轮计算使用 lastSum = output; }
- 需求2:每轮计算「当前迭代元素 + 数组中相邻的上一个元素」(首元素无前置相邻值可单独处理)
int[] input = { 28, 2, 3, -3, -2, 1, 2, 35, -1, 0, 0, -1 }; // 首元素直接输出 Console.WriteLine(input[0]); // 从第二个元素开始遍历,直接取i-1位置的元素就是上一个相邻值 for (int i = 1; i < input.Length; i++) { int output = input[i] + input[i-1]; Console.WriteLine(output); }
注意:非必要不要在for循环的逻辑块内手动修改循环索引变量
i的值,随意修改很容易出现遍历漏值、取值错位、索引越界的问题。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

