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);
基本上我使用布尔值isGreaterThan,
进行二元搜索,要求是大于x的数字<?em>,你可以回答是或否。通过使先前的平均值成为新的lowerLimit或upperLimit,从lowerLimit到upperLimit的值数组每次迭代减半。
问题是,一旦它将数组缩小到只有两个或三个值,它会多次询问是多于x?的数字,例如:
Is it greater than 56?
是的
Is it greater than 57?
没有
Is it greater than 56?
没有
这个数字是56。
我很确定它是因为平均值是作为int向下舍入的。它完美地工作到最后,我只是无法弄清楚如何缓解这个最后的小问题。
答案 0 :(得分:0)
我认为你应该有一个基本情况,其中lowerLimit == upperLimit,如果它只是返回那个数字,如果没有调用isGreaterThan函数。