我在比较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;
}
我已经盯着这个问题很长一段时间了,并且无法弄明白,所以任何帮助都会受到赞赏。
答案 0 :(得分:3)
这是一个逻辑错误。您的意思是&&
而不是||
。
无论如何,你可以使用正则表达式:
// must contain at least one digit, and only 0 or 1
public boolean isValidBinary(String s)
{
return s.matches("^[01]+$");
}
答案 1 :(得分:1)
重新思考内在条件中的逻辑:if(c != '0' || c != '1')
。您想在此处使用AND:if ((c != '0') && (c != '1'))
。这意味着如果两者条件为真,那么输入应被视为无效,即如果不是0 ,则c
是无效字符,并且不是1 。
考虑您的代码正在检查1
字符的情况:它从测试的左侧开始:c != 0
。这是true
,由于OR短路,整个条件的结果为true
,并且您的函数返回false
,即使正在测试的当前字符,{{1 },不应使输入无效。