如何解决JAVA-13 正确,如果返回没有破坏功能
我正在编写一个二进制搜索算法,但我对这里的逻辑有点迷茫;我正在检查此列表是否包含值 67 作为具有递归函数“containsDigit”的中间元素。在这种情况下,67 是结果部分中看到的中间列表值,并且输入了 if 语句,但是由于某种原因没有返回“true”,而是函数选择了 false。
谁能告诉我这是为什么?
import java.util.Arrays;
public class Binary {
public boolean containsDigit (int [] numlist,int digit){
int middle = (int )Math.ceil(numlist.length/2);
int middle_val = numlist[middle];
System.out.println(Arrays.toString(numlist));
System.out.println(digit);
System.out.println(middle_val);
if (middle_val == digit){
System.out.println("should return true here");
return true;
}
else if (numlist[middle]>digit){
containsDigit(Arrays.copyOfRange(numlist,middle-1),digit);
}
else if (numlist[middle]<digit){
containsDigit(Arrays.copyOfRange(numlist,middle+1,numlist.length),digit);
}
return false;
}
public static void main(String[] args) {
Binary obj = new Binary();
int [] numlist = {1,2,3,5,23,67,90};
boolean contains = obj.containsDigit(numlist,67);
System.out.println("returns "+contains);
}
}
结果:
编辑:
我找到原因了,我没有返回函数结果,所以找到true后没有函数中断,它选择了false,谢谢帮助!
解决方法
您没有使用递归调用返回的值。
代码的那部分示例:
else if (numlist[middle]<digit){
containsDigit(Arrays.copyOfRange(numlist,middle+1,numlist.length),digit);
}
return false;
根本没有使用 containsDigit
的返回值 - 即使调用结果是 true
,最后总是返回 false
。
- 必须测试数组是否只有一个值才能停止递归,如果是正确的值则返回;
- 否则返回递归调用的值
- 使用调试器逐步执行程序,看看发生了什么
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。