为什么我的变量设置为0?

时间:2009-11-08 01:29:29

标签: java parameters

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的参数?

6 个答案:

答案 0 :(得分:5)

尝试:

// 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成为您想要的双重分割。

答案 1 :(得分:1)

1 / n通常是一个分数,但在权力声明中,你声明n是整数。那每次都会敲掉小数位!

答案 2 :(得分:1)

这是因为功率定义为“n”作为int,因此1 / n将始终小于1,当存储为int时将为零。将“int n”更新为“double n”。示例如下:

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

问题是你从rootNofX传递1/2到一个int,所以它变为零。

答案 5 :(得分:0)

1/n1.0/n

之间存在很大差异

考虑宣称nint的真正含义......