我是Java的新手,也是我目前的第一堂课。我的任务是创建一个二进制搜索平方根计算器。我相信我的方法和语法大多是正确的,但由于某些原因,无论我在程序中输入什么数字,我都会收到0。谁能告诉我计算方法出了什么问题?
public static double calculation(double userInput, double lowerBound, double upperBound, double midPoint) {
// Workaround method to calculate the square root of a double integer value, with the use of two bounds getting infintely closer to a fixed point (the square root).
midPoint = (lowerBound + upperBound) / 2;
upperBound = userInput;
while(midPoint*midPoint - userInput > 0.001 || midPoint*midPoint - userInput < -0.001)
{
if (midPoint*midPoint > userInput)
{
lowerBound = midPoint;
}
else if (midPoint*midPoint < userInput)
{
upperBound = midPoint;
}
}
midPoint = (lowerBound + upperBound) / 2;
return midPoint;
}
这是我对本网站的第一篇真实帖子,如果我的格式不正确,我道歉。任何帮助将不胜感激。如果需要,我可以提供更多代码行,但我假设解决方案应该只适用于本节。谢谢!
答案 0 :(得分:0)
当执行进入while
循环时,它永远不会退出,因为midPoint
永远不会在循环体内发生变化,因此循环条件将永远为真。我想你想把这一行添加为循环中的最后一个语句:
midPoint = (lowerBound + upperBound) / 2;
另一个错误是循环条件没有意义。
我认为midPoint
不应该在(-0.001, 0.001)
的范围内。我想你的意思是:
while(midPoint*midPoint - userInput > 0.001 || midPoint*midPoint - userInput < -0.001)
通过这两项更改,您的程序应该终止并按预期工作。
答案 1 :(得分:0)
没有理由将中点作为参数传递给它进行计算。删除它并让midPoint
成为局部变量。
您将midPoint平方与0.001
和-0.001
进行比较,而不是将这些常量用作userInput
的调整。这将导致答案为0
。试试这个:
while(midPoint*midPoint > userInput + 0.001 || midPoint*midPoint < userInput - 0.001)
if (midPoint*midPoint > userInput)
{
lowerBound = midPoint;
}
else if (midPoint*midPoint < userInput)
{
upperBound = midPoint;
}
midPoint
。 midPoint = (lowerBound + upperBound) / 2;
}