C#判断数字是否含3报并非所有代码路径返回值错误如何解决
问题原因及解决方案
现有代码的两个核心错误
- 第一:返回路径不全
你写的两种遍历逻辑都只会判断字符串的第一个字符就直接返回结果,同时编译器无法覆盖字符串长度为0(空输入)时的返回场景,所以触发not all code paths return a value编译错误。 - 第二:字符匹配规则错误
字符串中的每个元素是char类型,数字字符'3'的ASCII编码值为51,你直接和int类型的3做相等判断,永远无法匹配到目标字符。
修正后的代码实现
基于字符串遍历的实现(符合你当前读入为字符串的写法)
using System; class Program { public static void Main (string[] args) { Console.WriteLine("Enter a number: "); string num = Console.ReadLine(); Console.WriteLine(containsThree(num)); } static bool containsThree (string num) { for (int i = 0; i < num.Length; i++) { if (num[i] == '3') return true; } // 全部遍历完未找到3,统一返回false return false; } }
符合「不转换数字为其他类型」要求的数值运算实现
如果严格遵循需求中不能将数字转换为其他类型的要求,你不应该将输入读为字符串,改用数值取模运算判断每一位即可:
using System; class Program { public static void Main (string[] args) { Console.WriteLine("Enter a number: "); int num = int.Parse(Console.ReadLine()); Console.WriteLine(containsThree(num)); } static bool containsThree (int num) { // 兼容负数输入,先取绝对值 num = Math.Abs(num); while(num > 0) { // 取个位判断是否为3 if(num % 10 == 3) return true; // 去掉个位,继续判断更高位 num = num / 10; } return false; } }
内容的提问来源于stack exchange,提问作者ナディル
相关产品推荐
相关产品推荐

