【问题标题】:Why is my Variable set to 0?为什么我的变量设置为 0?
【发布时间】:2009-11-08 01:29:28
【问题描述】:
import java.lang.Math;
public class NewtonIteration {

    public static void main(String[] args) {
        System.out.print(rootNofX(2,9));
    }

    // computes x^n
    public static double power(double x, int n) {
        if (n==0) {
            return 1;
        }       
        double Ergebnis = 1;
        for (int i=0; i<=Math.abs(n)-1; i++) {
            Ergebnis *= x;
        }
        if (n<0) {
            Ergebnis = 1/Ergebnis;
        }

        return Ergebnis;
    }

    // computes x^(1/n)
    public static double rootNofX(int n, double x) {
        return power(x, 1/n);
    }
}

每当调用 power(x,1/n) 时,n 都会被重置为 0。但是,n 不是给 rootNofX 的参数,值为 2 吗?

【问题讨论】:

  • 在将 1/n 舍入为 0 后,您希望循环如何工作?您的示例试图找到 9 的平方根。您认为这段代码如何循环 1/2 次并半乘 1 * 9 得到 3?您将需要一种不同的算法来执行 0 到 1 之间的幂。
  • 仅供参考:x^(1/2) != 1/(x^2) 请重新学习关于幂和对数的定律。 -- Jakob Krainz,Lehrstuhl 2 Informatik,大学。埃尔兰根

标签: java parameters


【解决方案1】:

试试:

// computes x^(1/n)
    public static double rootNofX(int n, double x) {
        return power(x, 1.0/n);
    }

因为1intnint 所以1/n 是一个整数除法,当n 不为1 时返回0,当n 为0 时抛出错误。

1.0 是一个双精度数,因此它使 1.0/n 成为您想要的双精度数。

【讨论】:

  • 还要把power方法的参数n改成double,不然还是不行。
  • @hjhill:你不需要。尝试一下。欢呼! :-D
【解决方案2】:

1/n 通常是一个分数,但是在幂的声明中你声明 n 是整数。每次都会去掉小数位!

【讨论】:

    【解决方案3】:

    这是因为幂是用“n”定义为 int 的,所以 1/n 将始终小于 1,当存储为 int 时将为零。将“int n”更新为“double n”。示例如下:

    public static double power(double x, double n) { ... }
    

    【讨论】:

      【解决方案4】:

      这是因为您使用的是整数,所以 1 / 2 = 0.5 作为整数是 0。将原型更改为 rootNofx(double n, double x)power(double x, double n)

      另外,由于rootNofx 使用power,在我看来,最好让参数以相同的方式排序,以避免混淆。

      【讨论】:

      • 2/1 是 0.5?这一定是我遇到很多麻烦的新数学! :)
      • 哈哈!抱歉,我的意思是 1 / 2 :)
      【解决方案5】:

      问题是您将 1/2 从 rootNofX 传递到一个 int,所以它变成了零。

      【讨论】:

        【解决方案6】:

        1/n1.0/n 有很大的区别

        考虑将n 声明为int 的真正含义...

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-11-14
          • 1970-01-01
          • 1970-01-01
          • 2017-04-18
          • 1970-01-01
          相关资源
          最近更新 更多