循环逻辑错误修正需求:如何在数字序列输出中跳过所有末尾为指定数字的数值
修正C#数字序列生成代码(跳过末尾指定数字的数)
你想要生成一段从起始数字开始、共n个数字的序列,但要跳过所有末尾是指定数字(比如3)的数,对吧?你的原代码确实存在几个逻辑问题,导致没法实现预期功能,我来帮你修正并解释下:
原代码的核心问题
- 循环条件
i <= n错误:这里的n是你要生成的序列长度,不是数字的上限,不能用它来判断循环结束 - 跳过逻辑错误:你只判断了当前数字不等于指定的
iBöseZahl,但需求是跳过所有末尾为该数字的数(比如指定3的话,13、23这些都要跳过),不是只跳过单个数字 - 没有计数已生成的有效数字:你需要跟踪已经输出了多少个符合要求的数字,直到达到n个才停止循环
修正后的代码
Console.Write("Enter the Böse Number (the digit to skip at the end):"); int iBöseZahl = Convert.ToInt32(Console.ReadLine()); Console.Write("Enter the starter number:"); int iStarter = Convert.ToInt32(Console.ReadLine()); Console.Write("Enter how many numbers you want to generate:"); int n = Convert.ToInt32(Console.ReadLine()); int count = 0; // 计数已生成的有效数字 int current = iStarter; // 当前检查的数字 while (count < n) { // 判断当前数字的最后一位是否是要跳过的数字 if (current % 10 != iBöseZahl) { Console.Write($"{current}, "); count++; // 有效数字计数加1 } current++; // 不管是否有效,都检查下一个数字 }
优化版(输出格式更美观)
如果不想让最后一个数字后面带逗号,可以把有效数字先存到列表里,再统一输出:
Console.Write("Enter the Böse Number (the digit to skip at the end):"); int iBöseZahl = Convert.ToInt32(Console.ReadLine()); Console.Write("Enter the starter number:"); int iStarter = Convert.ToInt32(Console.ReadLine()); Console.Write("Enter how many numbers you want to generate:"); int n = Convert.ToInt32(Console.ReadLine()); List<int> result = new List<int>(); int current = iStarter; while (result.Count < n) { if (current % 10 != iBöseZahl) { result.Add(current); } current++; } // 用逗号分隔输出,自动处理末尾无多余符号 Console.WriteLine(string.Join(", ", result));
内容的提问来源于stack exchange,提问作者Benyam
相关产品推荐
相关产品推荐

