【问题标题】:Java won't print outputJava不会打印输出
【发布时间】:2017-01-18 19:55:05
【问题描述】:

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

【问题讨论】:

  • 为什么是macc floats?更好的名称也可能有助于提高可读性。我猜你的 while 循环不会终止。顺便说一句:你知道Math.sqrt 了吗?
  • 尝试只使用一种类型作为开始,然后在第二个 while 循环周围调试您的代码。
  • 绝对是一个无限循环。您应该学习使用 IDE 的调试器。小提示while ((u - l) &gt; acc) 是有问题的,因为ul 从未真正改变它们的值。
  • m 是上界和下界之间的中点,acc 是更好近似的准确度。我知道Math.sqrt,但我不能用它来做作业……
  • while ((u - l) > acc) 是无限循环。在循环 l=m 条件下,两者具有相同的值 0.5,因此 'l' 的值不会改变。

标签: java


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    您的代码将进入无限循环。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-25
      • 1970-01-01
      • 1970-01-01
      • 2019-07-29
      相关资源
      最近更新 更多