如果 return 不破坏函数,JAVA-13 正确
JAVA-13 correct if return doesn't break function
我正在写一个二进制搜索算法,我对这里的逻辑有点迷茫;我正在使用递归函数“containsDigit”检查此列表是否包含值 67 作为中间元素。在这种情况下,67 是结果部分中看到的中间列表值,并且输入了 if 语句,但是由于某种原因,没有 'true' returned,而是函数选择 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,0, 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);
}
}
结果:
编辑:
找到原因了,我没有return函数结果,所以发现true后没有函数break就选择了false,谢谢帮助!
您没有使用 return 由递归调用编辑的值。
您的那部分代码中的示例:
else if (numlist[middle]<digit){
containsDigit(Arrays.copyOfRange(numlist,middle+1, numlist.length), digit);
}
return false;
根本没有使用 containsDigit
的 returned 值 - 即使调用结果为 true
,最后 false
始终是 returned.
- 必须测试数组是否只有一个值来停止递归并且return如果那是正确的值;
- 否则return递归调用的值
- 使用调试器一步步执行程序,看看是怎么回事
我正在写一个二进制搜索算法,我对这里的逻辑有点迷茫;我正在使用递归函数“containsDigit”检查此列表是否包含值 67 作为中间元素。在这种情况下,67 是结果部分中看到的中间列表值,并且输入了 if 语句,但是由于某种原因,没有 'true' returned,而是函数选择 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,0, 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);
}
}
结果:
编辑:
找到原因了,我没有return函数结果,所以发现true后没有函数break就选择了false,谢谢帮助!
您没有使用 return 由递归调用编辑的值。
您的那部分代码中的示例:
else if (numlist[middle]<digit){
containsDigit(Arrays.copyOfRange(numlist,middle+1, numlist.length), digit);
}
return false;
根本没有使用 containsDigit
的 returned 值 - 即使调用结果为 true
,最后 false
始终是 returned.
- 必须测试数组是否只有一个值来停止递归并且return如果那是正确的值;
- 否则return递归调用的值
- 使用调试器一步步执行程序,看看是怎么回事