for循环执行异常:预期10次却仅6次退出,求技术支持
问题排查与修复
核心问题:循环变量被重复递增
你的for循环中,除了循环头自带的i++,在循环体末尾又手动执行了i=i+1,这导致每次循环i实际增加2。原本的循环条件i<=10加上这个手动递增,最终只执行了6次循环就满足退出条件。
额外优化:Random实例重复创建的问题
每次循环都创建Random实例,会因系统时钟精度限制导致生成的随机数重复(短时间内创建的Random种子相同),应该将Random实例移到循环外,只初始化一次。
修复后的完整代码
using System; namespace Mathhero { class MainClass { public static void Main(string[] args) { // 将Random实例移到循环外,仅初始化一次 Random numgen = new Random(); // 循环条件改为i < 10,确保执行10次 for (int i = 0; i < 10; i++) { int num1 = numgen.Next(1, 11); int num2 = numgen.Next(1, 11); Console.WriteLine("What is " + num1 + " * " + num2 + " equal to ???"); int Answer = Convert.ToInt32(Console.ReadLine()); if (Answer == num1 * num2) { int ran = numgen.Next(1, 4); switch (ran) { case 1: Console.WriteLine("Good work!!"); break; case 2: Console.WriteLine("Nice!!!"); break; default: Console.WriteLine("Excellent!!"); break; } Console.WriteLine(); } else { int ran = numgen.Next(1, 4); switch (ran) { case 1: Console.WriteLine("Wrong!!"); break; case 2: Console.WriteLine("Try hard!!!"); break; default: Console.WriteLine("DO homework!!"); break; } Console.WriteLine(); } // 删除此处的i=i+1;语句 } Console.WriteLine("Test Ended!!!"); } } }
修复说明
- 删除循环体末尾的
i=i+1;,让循环头的i++正常控制循环次数,i < 10的条件确保生成10道题目。 - 将Random实例移到循环外,避免短时间重复创建导致的随机数重复问题,保证每次生成的乘数都是独立随机的。
内容的提问来源于stack exchange,提问作者Ashitosh bendre
相关产品推荐
相关产品推荐

