0

我在比较 Java 中的字符时遇到问题。我试图找到一个有效的二进制数,所以我将一个带有二进制数字的字符串传递给一个函数,并确保它们是 0 或 1。我遍历并检查字符串中的每个字符,但是,我的函数告诉我它很糟糕(即使我知道我已经给它一个正确的二进制数)。

这是功能:

public boolean isValidBinary(String s) {
    //First we get the string length
    int strLen = s.length();
    //Now we loop through each character of the string
    for(int x = 0; x < strLen; x++) {
        //Assign the character to a variable each loopthrough
        char c = s.charAt(x);
        //Check if it's either a 0 or a 1
        if(c != '0' || c != '1') {
            return false;
        }
    }
    //This is reached when all char's have been evaluated as 0 or 1
    return true;
}

我已经盯着这个问题很长一段时间了,一直无法弄清楚,所以任何帮助都将不胜感激。

4

2 回答 2

3

这是一个逻辑错误。你的意思是&&代替||.

无论如何,您都可以为此使用正则表达式:

// must contain at least one digit, and only 0 or 1
public boolean isValidBinary(String s)
{
    return s.matches("^[01]+$");
}
于 2012-09-05T02:39:29.973 回答
1

重新思考你内在条件的逻辑:if(c != '0' || c != '1')。您想在此处使用 AND if ((c != '0') && (c != '1')):。这意味着如果两个条件都为真,那么输入应该被认为是无效的,即,如果它不是 0也不是 1c ,那么它就是一个无效字符。

考虑您的代码检查1字符的情况:它从 test: 的左侧开始c != 0。这是true,并且由于 OR 短路,整个条件的结果是true,并且您的函数返回false,即使当前正在测试的字符1也不应该使输入无效。

于 2012-09-05T02:40:40.973 回答