Java 二进制搜索方法需要更高效 inti=0; int finalVal=0; 而(我
基本上,我用一个布尔值Java 二进制搜索方法需要更高效 inti=0; int finalVal=0; 而(我,java,boolean,binary-search,Java,Boolean,Binary Search,基本上,我用一个布尔值大于,进行二元搜索,它询问数字是否大于x?你可以回答“是”或“否”。每次迭代,从lowerLimit到upperLimit的值数组都会被减半,方法是将以前的平均值变成新的lowerLimit或upperLimit 问题是,一旦它将数组缩小到只有两个或三个值,它将询问该数字是否大于x?对于同一数字多次,例如: 是否大于56?是 是否大于57?否 是否大于56?否 号码是56 我很确定这是因为平均值被四舍五入为一个整数。它一直工作到最后,我只是不知道如何缓解最后一个小问题。我想
大于,
进行二元搜索,它询问数字是否大于x?你可以回答“是”或“否”。每次迭代,从lowerLimit到upperLimit的值数组都会被减半,方法是将以前的平均值变成新的lowerLimit或upperLimit
问题是,一旦它将数组缩小到只有两个或三个值,它将询问该数字是否大于x?对于同一数字多次,例如:
是否大于56?
是
是否大于57?
否
是否大于56?
否
号码是56
我很确定这是因为平均值被四舍五入为一个整数。它一直工作到最后,我只是不知道如何缓解最后一个小问题。我想你应该有一个基本情况,lowerLimit==upperLimit,如果它只是返回那个数字,如果不是,调用isGreaterThan函数
int i = 0;
int finalVal = 0;
while (i < this.maxQuestions) {
if (this.isGreaterThan(average(lowerLimit, upperLimit))) {
lowerLimit = average(lowerLimit, upperLimit);
finalVal = upperLimit;
} else {
upperLimit = average(lowerLimit, upperLimit);
finalVal = lowerLimit;
}
i++;
}
System.out.println("The number you picked was: " + finalVal);