为何C#代码未设置maxNegative,还输出零作为最大负数?
解决C#获取输入最大负数时变量未赋值的问题
你的问题出在第一次遇到负数时,maxNegative是null,导致number > maxNegative的比较逻辑不成立,变量始终没被赋值。而且内层的number <= -1判断完全多余,外层已经做过这个校验了。
问题原因拆解
当你输入第一个负数(比如-5)时,maxNegative还是null,number > maxNegative这个比较在C#里会返回false(值类型和可空值类型比较时,null被视为比任何值都小,但这里第一次遇到负数应该直接赋值,而不是先比较),所以maxNegative一直是null,最后输出时会被默认转成0。
修复后的代码
int number; int? maxNegative = null; bool foundNegative = false; do { Console.Write("Enter a number: "); number = int.Parse(Console.ReadLine()); if (number < 0) // 用<0比<= -1更直观,效果一致 { foundNegative = true; // 第一次遇到负数直接赋值,后续再比较是否更大 if (maxNegative == null || number > maxNegative) { maxNegative = number; } } } while (number != 0); if (foundNegative) { Console.WriteLine("The maximum negative number is: " + maxNegative); } else { Console.WriteLine("No negative numbers entered."); // 替换无意义的"jh"提示 }
关键修改点
- 去掉内层重复的
number <= -1判断,简化逻辑 - 调整条件为
maxNegative == null || number > maxNegative:第一次遇到负数直接赋值,之后只保留比当前maxNegative更大的负数(更接近0的负数) - 把无意义的"jh"提示改成明确的"没有输入负数"提示,提升可读性
测试示例:输入-5、-3、-1、0,程序会输出The maximum negative number is: -1,符合预期。
内容的提问来源于stack exchange,提问作者user16854458
相关产品推荐
相关产品推荐

