分享
三行代码  ›  专栏  ›  技术社区  ›  neeoxsz

为什么输出是9?

  •  -3
  • neeoxsz  · 技术社区  · 6 天前

    在第一轮中,2小于8。然后计算2加5。变量“i”现在的值应该是7。

    最后我没有得到数字9。错误在哪里?

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace testing
    {
        class testclass
        {
            static void Main()
            {
                int res = calc(2,8,5); // from = 2; to = 8; step = 5;
                Console.WriteLine(res);
                Console.ReadKey();
            }
            static int calc(int from, int to, int step = 1)
            {
                int res = 0;
                for (int i = from; i < to; i += step)
                    res += i;
                return res;
            }
        }
    }
    
    Output: 9
    
    2 回复  |  直到 6 天前
        1
  •  1
  •   canton7    6 天前

    调试你的程序!

    使用调试器很容易,但也可以使用 Console.WriteLine

    static int calc(int from, int to, int step = 1)
    {
        int res = 0;
        for (int i = from; i < to; i += step)
        {
            Console.WriteLine($"Adding {i} to {res} to make {res + i}");
            res += i;
        }
        return res;
    }
    

    Adding 2 to 0 to make 2
    Adding 7 to 2 to make 9
    9
    

    所以在第一圈, i = from 所以呢 i 是2,我们把2和0相加得到2,然后把i增加 step ,也就是5,得到7。

    在第二圈, 是7,所以我们把7和2相加得到9,然后递增 再按步骤得到12。12大于 to ,即8,因此我们停止迭代。

        2
  •  0
  •   phuzi    6 天前

    想想逻辑:

    • res 从零开始。
    • i 设置为2
    • 下一次循环时, 现在是7岁
    • res += i => res = 2 + 7 所以 物件 现在是9岁。
    • 第三次循环时,循环条件失败,因此for循环完成。