我一直在研究一种递归解决方案,用于评估数字是否为二进制数。但是我的解决方案总是返回false,我似乎无法使逻辑正确。我的代码如下:
public class Convert{
public static boolean isBinaryNumber(int binary){
int temp = 0;
boolean status = false;
if(binary==0 || binary==1) {
status = true;
return status;
}
else {
temp = binary%10;
if(temp == 1 || temp == 0) {
binary = binary/10;
isBinaryNumber(binary);
}
else {
status = false;
return status;
}
}
return status;
}
public static void main(String a[]){
System.out.println("Is 1000111 binary? :"+ isBinaryNumber(1000111));
System.out.println("Is 10300111 binary? :"+ isBinaryNumber(10300111));
}
}
答案 0 :(得分:4)
if(temp == 1 || temp == 0) {
binary = binary/10;
isBinaryNumber(binary);
}
应该考虑递归调用的返回值,例如
if(temp == 1 || temp == 0) {
binary = binary/10;
status = isBinaryNumber(binary);
}
请注意,整个代码可以压缩很多,例如,您可以一致地删除状态变量或早期返回语句。
如果您保持状态并明确涵盖所有情况,我将初始化删除为false,因此编译器能够指出缺少分配的分支。在这种情况下,这可能会指向错误位置。
通过一些进一步的简化,代码可以压缩到
public static boolean isBinaryNumber(int binary) {
return binary == 1 || binary == 0 || binary >= 10 &&
isBinaryNunber(binary / 10) && isBinaryNumber(binary % 10)
}
答案 1 :(得分:1)
您必须在递归通话前加return
。
如果删除最后一个return语句,其余代码将按预期工作。
但是,我做了一些优化(如下所述)。因此,守则应如下所示:
public static boolean isBinaryNumber(int binary){
if(binary==0 || binary==1) {
return true;
}
else {
int temp = binary%10;
if(temp == 1 || temp == 0) {
binary = binary/10;
return isBinaryNumber(binary);
}
else {
return false;
}
}
}
我还删除了无用的status
变量,因为您只需返回结果而不是将其存储到值而不是返回它。