尝试创建一个二进制搜索平方根计算器,每次都收到 0 作为结果
Attempting to create a binary search square root calculator, receiving 0 as a result every time
我对 Java 非常陌生,目前是我的第一个 class。我的任务是创建一个二进制搜索平方根计算器。我相信我的方法和语法大部分都是正确的,尽管出于某种原因,无论我在程序中输入什么数字,结果我都会收到 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;
}
这是我第一次真正 post 到这个网站,如果我的格式有任何不正确的地方,我深表歉意。任何帮助将不胜感激。如果需要,我可以提供更多代码行,但我假设解决方案应该只用这一部分就可以实现。谢谢!
当执行进入while
循环时,它永远不会退出,因为midPoint
在循环体内永远不会改变,所以循环条件永远为真。我认为您想将此行添加为循环中的最后一条语句:
midPoint = (lowerBound + upperBound) / 2;
另一个错误是循环条件实际上没有意义。
我认为 midPoint
不应该在 (-0.001, 0.001)
的范围内。我想你的意思是这样的:
while(midPoint*midPoint - userInput > 0.001 || midPoint*midPoint - userInput < -0.001)
通过这两项更改,您的程序应该会终止并按预期工作。
没有理由在计算时将中点作为参数传递。删除它并让 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;
}
我对 Java 非常陌生,目前是我的第一个 class。我的任务是创建一个二进制搜索平方根计算器。我相信我的方法和语法大部分都是正确的,尽管出于某种原因,无论我在程序中输入什么数字,结果我都会收到 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;
}
这是我第一次真正 post 到这个网站,如果我的格式有任何不正确的地方,我深表歉意。任何帮助将不胜感激。如果需要,我可以提供更多代码行,但我假设解决方案应该只用这一部分就可以实现。谢谢!
当执行进入while
循环时,它永远不会退出,因为midPoint
在循环体内永远不会改变,所以循环条件永远为真。我认为您想将此行添加为循环中的最后一条语句:
midPoint = (lowerBound + upperBound) / 2;
另一个错误是循环条件实际上没有意义。
我认为 midPoint
不应该在 (-0.001, 0.001)
的范围内。我想你的意思是这样的:
while(midPoint*midPoint - userInput > 0.001 || midPoint*midPoint - userInput < -0.001)
通过这两项更改,您的程序应该会终止并按预期工作。
没有理由在计算时将中点作为参数传递。删除它并让
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;
}