判断字符串是否为二进制数方法异常求助:输入均返回true
解决istDualZahl方法始终返回true的问题
你的方法存在几个关键问题,导致无论输入什么内容都会返回true,以下是问题分析和修复方案:
核心问题拆解
字符比较完全错误
你把int类型的y(2到9)直接强转为char,但数字字符'0'-'9'的ASCII码是48到57,比如'2'对应的十进制值是50,而你转的是十进制2(这是个不可见的控制字符),所以c.equals(b)永远不会匹配,自然不会触发return false。循环索引越界
外层while循环的条件n <= zahl.length()是错的,字符串的索引范围是0到length()-1,当n等于字符串长度时,调用zahl.charAt(n)会抛出StringIndexOutOfBoundsException,这会导致循环异常终止,最终走到return true。逻辑覆盖不全
你的逻辑只检查字符是否是2-9,但二进制数只能包含0和1,要是输入字母、符号这类非数字字符,比如"a10",你的方法会错误返回true,不符合二进制数的定义。
修复后的代码
public static boolean istDualZahl(String zahl) { int n = 0; // 修正循环条件,避免索引越界 while (n < zahl.length()) { char c = zahl.charAt(n); // 直接判断字符是否为0或1,不符合则返回false if (c != '0' && c != '1') { return false; } n++; } // 若不允许空字符串,可添加判断:return zahl.length() > 0; return true; } public static void main(String[] args) { System.out.println(istDualZahl("101010")); // 输出true System.out.println(istDualZahl("123")); // 输出false System.out.println(istDualZahl("a10")); // 输出false,修复了原逻辑的漏洞 }
修复说明
- 删掉了冗余的内层循环,直接判断字符是否为'0'或'1',逻辑更清晰高效
- 把外层循环条件改成
n < zahl.length(),彻底避免索引越界问题 - 覆盖了所有非0/1的字符场景,确保只有纯0和1组成的字符串才会返回true
内容的提问来源于stack exchange,提问作者hus
相关产品推荐
相关产品推荐

