Java不会打印输出

时间:2017-01-18 11:21:43

标签: java

我使用二进制搜索来编写一个简单的平方根计算器,它在Java中输入双精度数。但是,当我尝试通过在main函数中打印出答案来测试我的代码时,终端中没有打印出任何内容。我也有错误Possible lossy conversion from double to 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);
    }
}

2 个答案:

答案 0 :(得分:3)

它在第二个条件下陷入无限循环状态,这就是它没有将值打印到控制台的原因。

答案 1 :(得分:1)

float m = (u + l) / 2;
在这里你必须输入cast into float,因为当两个数据类型变量参与除法时,结果将是更高的数据类型。

float acc = 0.00000000001;
这里也有类型转换,因为默认情况下java将小数点值视为Double。

while ((u - l) > acc){
    if ((m * m) < n){
        l = m;
    }
}

这里你的代码将无限循环。