Java 爪哇元';t打印输出
我正在使用二进制搜索编写一个简单的平方根计算器,它在Java中接受双精度。然而,当我试图通过在main函数中打印答案来测试代码时,终端中没有打印任何内容。我还得到了错误Java 爪哇元';t打印输出,java,Java,我正在使用二进制搜索编写一个简单的平方根计算器,它在Java中接受双精度。然而,当我试图通过在main函数中打印答案来测试代码时,终端中没有打印任何内容。我还得到了错误从double到float的可能有损转换。。。。。。 这是我的密码: public class MyMath{ public static double sqrt(double n){ double u = 1; double l = 0; float m = (u + l)
从double到float的可能有损转换
。。。。。。
这是我的密码:
public class MyMath{
public static double sqrt(double n){
double u = 1;
double l = 0;
float m = (u + l) / 2;
double norm_input = 1;
float acc = 0.00000000001;
double answer = 0;
if ((n > 0) && (n < 1)){
if ((m * m) < n){
l = m;
}else{
u = m;
}
answer = (u + l) / 2;
return answer;
}else{
int count = 0;
while (n > 1){
n = n / 4;
norm_input = norm_input * 2;
count++;
}
while ((u - l) > acc){
if ((m * m) < n){
l = m;
}else{
u = m;
}
}
answer = (u + l) / 2 * norm_input;
return answer;
}
}
public static void main(String[] args){
double a = new MyMath().sqrt(4);
System.out.println(a);
}
}
公共类MyMath{
公共静态双sqrt(双n){
双u=1;
双l=0;
浮动m=(u+l)/2;
双范数_输入=1;
浮动acc=0.00000000001;
双答案=0;
如果((n>0)和&(n<1)){
如果((m*m)1){
n=n/4;
标准输入=标准输入*2;
计数++;
}
而((u-l)>acc){
如果((m*m)
它在秒while条件下卡在无限循环中,这是它不向控制台打印值的原因。它在秒while条件下卡在无限循环中,这是它不向控制台打印值的原因。浮点m=(u+l)/2代码>
这里您必须将类型转换为float,因为当两个数据类型变量参与除法时,结果将是更高的数据类型
float acc=0.00000000001代码>
这里还有类型转换,因为默认情况下java将小数点值视为双精度值
while ((u - l) > acc){
if ((m * m) < n){
l = m;
}
}
while((u-l)>acc){
如果((m*m)
这里的代码将进入无限循环。float m=(u+l)/2代码>
这里您必须将类型转换为float,因为当两个数据类型变量参与除法时,结果将是更高的数据类型
float acc=0.00000000001代码>
这里还有类型转换,因为默认情况下java将小数点值视为双精度值
while ((u - l) > acc){
if ((m * m) < n){
l = m;
}
}
while((u-l)>acc){
如果((m*m)
这里的代码将进入无限循环。为什么m
和acc
float
s?更好的名称也有助于提高可读性。我猜您的while循环不会终止。顺便说一句:你已经知道Math.sqrt
了吗?试着在开始时只使用一种类型,然后围绕第二个while-loop调试你的代码。肯定是一个无止境的循环。您应该学习使用IDE的调试器。小提示while((u-l)>acc)
是有问题的,因为u
和l
实际上从未改变它们的值。m是上限和下限之间的中点,acc是更精确的近似值。我知道Math.sqrt
,但我不能用它来做作业……而((u-l)>acc)是无限循环。。循环中的l=m,两者的值相同。5所以“l”的值不变。为什么m
和acc
浮动?更好的名称也有助于提高可读性。我猜您的while循环不会终止。顺便说一句:你已经知道Math.sqrt
了吗?试着在开始时只使用一种类型,然后围绕第二个while-loop调试你的代码。肯定是一个无止境的循环。您应该学习使用IDE的调试器。小提示while((u-l)>acc)
是有问题的,因为u
和l
实际上从未改变它们的值。m是上限和下限之间的中点,acc是更精确的近似值。我知道Math.sqrt
,但我不能用它来做作业……而((u-l)>acc)是无限循环。。循环中的l=m条件,其中两者的值相同。5所以“l”的值不变。