C#如何从100开始逐次减1-10随机数直到0并输出每次结果
问题原因分析
- 循环选择错误:for循环自带的
i--固定步进属于要求禁用的固定递减逻辑,且代码中额外又加了一次i--,导致数值递减逻辑完全不符合随机减法的要求 - Random实例化位置错误:将
new Random()写在循环内部时,由于Random默认以系统时间戳作为种子,短时间连续实例化会生成大量重复随机数,需要移到循环外部 - 随机数范围错误:
Random.Next(minValue, maxValue)的maxValue是开区间,你写的ran.Next(1, 10)只会生成19的整数,要得到110的取值需要改为ran.Next(1, 11) - 终止逻辑错误:原代码没有处理最后一次减法可能直接降到负数的情况,也没有正确的循环终止判断逻辑
修复后的代码
// 随机数实例全局仅实例化一次即可 Random ran = new Random(); // 初始化初始值为100 int currentValue = 100; // 只要当前值大于0就继续执行随机减法 while (currentValue > 0) { // 生成1~10的随机数 int randomNum = ran.Next(1, 11); currentValue -= randomNum; // 确保输出结果不低于0,降到0即停止 currentValue = Math.Max(currentValue, 0); Console.WriteLine(currentValue); }
代码说明
- 改用while循环,不存在任何固定递减逻辑,所有数值变化完全由生成的随机数决定
- Random实例放在循环外,避免生成重复随机数
- 随机数范围调整为1~10,完全匹配需求
- 用
Math.Max(currentValue, 0)保证最后一次减法如果减到负数也会修正为0,符合降到0为止的要求
内容的提问来源于stack exchange,提问作者Ishmam
相关产品推荐
相关产品推荐

