You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#遍历数组时为何仅打印部分值而非全部数组元素?

问题原因分析

核心问题是循环变量i在单次循环内被重复自增,导致循环执行次数减半、读取的数组索引错位:

  • 你定义的for循环头部for (int i = 0; i < arr.Length - 1; i++)已经在每次循环结束时自带i++自增逻辑
  • 循环体中temp2 = arr[i++];的i++会额外让i自增1,相当于单次循环i总共加2,循环总次数直接变为原预期的一半
  • 你打印的是自增后的i对应的数组元素,最终输出结果自然和预期不符

具体执行流程验证

你传入的数组array6长度为7,元素索引为0~6,对应值为[3,2,1,2,3,4,3],实际循环执行过程如下:

  1. 第一次循环初始i=0
    • temp1 = arr[0] = 3
    • 执行arr[i++]:先取arr[0]赋值给temp2=3,随后i变为1
    • 打印arr[1] → 输出2
    • 执行for循环末尾的i++,i变为2
  2. 第二次循环初始i=2,满足i < 6的判定条件
    • temp1 = arr[2] =1
    • 执行arr[i++]:先取arr[2]赋值给temp2=1,随后i变为3
    • 打印arr[3] → 输出2
    • 执行for循环末尾的i++,i变为4
  3. 第三次循环初始i=4,满足i < 6的判定条件
    • temp1 = arr[4] =3
    • 执行arr[i++]:先取arr[4]赋值给temp2=3,随后i变为5
    • 打印arr[5] → 输出4
    • 执行for循环末尾的i++,i变为6
  4. 此时i=6不满足i < 6的循环判定条件,循环终止,最终输出结果就是2、2、4,和你观测的现象完全一致。

修正方案

如果你需要每次循环取相邻的两个数组元素存入temp1、temp2,只需要把循环体里的i++改为i+1,不要修改循环变量本身即可,参考写法:

static void func1(double[] arr)
{
    double temp1 = 0;
    double temp2 = 0;

    for (int i = 0; i < arr.Length - 1; i++)
    {
        temp1 = arr[i];
        temp2 = arr[i+1]; // 只读取i+1位置的元素,不自增i
        Console.WriteLine($"Contienes: {temp1} {temp2}");
    }
}

内容的提问来源于stack exchange,提问作者Ekmmo Alejandro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 22:54:02