Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 爪哇元';t打印输出_Java - Fatal编程技术网

Java 爪哇元';t打印输出

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)

我正在使用二进制搜索编写一个简单的平方根计算器,它在Java中接受双精度。然而,当我试图通过在main函数中打印答案来测试代码时,终端中没有打印任何内容。我还得到了错误
从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”的值不变。