C#代码修复:如何实现无20分成绩时的提示输出
修复无人得20分的判断逻辑问题
我来帮你排查并修复这个问题,先梳理下现有代码里导致判断失效的核心问题:
- 没有定义并初始化
is20变量,也没在遍历成绩时更新它的状态 Console.Write的格式字符串不完整,会直接编译报错- 缺少遍历结束后的判断逻辑和行数输出步骤
下面是修复后的完整代码,我会一步步解释关键修改点:
using System; namespace ConsoleApp1 { class Program { static void Main(string[] args) { double[,] points = new double[50, 5]; Random r = new Random(); // 初始化is20为false,默认假设没人拿到20分 bool is20 = false; int totalRows = points.GetLength(0); // 灵活获取总行数,避免硬编码 for (int k = 0; k < totalRows; k++) { for (int j = 0; j < 5; j++) { points[k, j] = r.NextDouble() * 5 + 15.5; if (points[k, j] > 20) points[k, j] = 20; // 检测到20分就标记状态 if (points[k, j] == 20) { is20 = true; } // 修复格式化输出,保留两位小数并优化排版 Console.Write("{0:F2} ", points[k, j]); } Console.WriteLine(); // 每行结束换行,让输出更清晰 } // 遍历完成后做最终判断 if (!is20) { Console.WriteLine("\nno one got 20 points"); Console.WriteLine($"总行数:{totalRows}"); } } } }
关键修改说明:
- 初始化状态变量:一开始把
is20设为false,只要遍历中发现任何一个20分,就将其改为true,确保最后判断的是所有成绩的整体状态 - 修复输出格式:原来的
Console.Write("{0:...");是不完整的语法,改成"{0:F2} "可以规范输出两位小数,同时添加换行让每行成绩独立显示 - 灵活获取行数:用
points.GetLength(0)获取二维数组的行数,比直接写50更灵活,后续修改数组大小无需同步调整这里 - 后置判断逻辑:所有成绩生成完成后再检查
is20状态,此时的状态是遍历全部数据后的最终结果,判断逻辑自然会生效
另外补充:你生成成绩的逻辑是对的——r.NextDouble() *5 +15.5的范围是[15.5,20.5),截断后确实会出现20分的情况,这个部分不需要改动。
内容的提问来源于stack exchange,提问作者user9748546
相关产品推荐
相关产品推荐

