学C#过程中遇到的for和while循环的问题(针对输出1-100中的所有素数的问题)

在学习C#语言的时候遇到了在写”输出1-100间素数“的代码时的for和while 循环的问题,下图分别是外层循环用while和for循环的不同代码和结果。我认为得到的结果应该相同(手动疑惑)
问题相关代码,请勿粘贴截图
        //首先是for循环的正确代码,这里我没有异议
        for(int i = 2;i <100;i++)
        {
            bool a = true;
            for (int j = 2; j < i; j++)
            {
                if (i % j == 0)
                {
                    a = false;
                    break;
                }
            }
            
            if (a)
            {
                Console.WriteLine(i);
            }
        }
        Console.ReadKey();

然后是用外层用while循环的代码:

        //找出1-100内所有的质数(只能被1和他自己整除)
        int i = 2;
        while(i <=100)
        {
            bool a = true;
            for (int j = 2; j < i; j++)
            {
                if (i % j == 0)
                {
                    a = false;
                    break;
                }
            }
            i++;
            if (a)
            {
                Console.WriteLine(i);
            }
        }
        Console.ReadKey();
    
运行结果及报错内容

第一个for循环代码正确这里不放结果了,下图是用while循环的错误结果

img

我的解答思路和尝试过的方法

我觉得两个代码的效果应该是一样的啊?为啥后面的不对,是我while用的不对吗,求解。

供参考,修改处见注释:

//找出1-100内所有的质数(只能被1和他自己整除)
        int i = 2;
        while(i <=100)
        {
            bool a = true;
            for (int j = 2; j < i; j++)
            {
                if (i % j == 0)
                {
                    a = false;
                    break;
                }
            }
            //i++; 这行移动到if(a){}下面
            if (a)
            {
                Console.WriteLine(i);
            }
            i++;  //移动到这里
        }
        Console.ReadKey();