You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

判断字符串是否为二进制数方法异常求助:输入均返回true

解决istDualZahl方法始终返回true的问题

你的方法存在几个关键问题,导致无论输入什么内容都会返回true,以下是问题分析和修复方案:

核心问题拆解

  1. 字符比较完全错误
    你把int类型的y(2到9)直接强转为char,但数字字符'0'-'9'的ASCII码是48到57,比如'2'对应的十进制值是50,而你转的是十进制2(这是个不可见的控制字符),所以c.equals(b)永远不会匹配,自然不会触发return false。

  2. 循环索引越界
    外层while循环的条件n <= zahl.length()是错的,字符串的索引范围是0到length()-1,当n等于字符串长度时,调用zahl.charAt(n)会抛出StringIndexOutOfBoundsException,这会导致循环异常终止,最终走到return true。

  3. 逻辑覆盖不全
    你的逻辑只检查字符是否是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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 15:35:21