java代码计算一些数字的倍数?

时间:2012-07-28 03:28:08

标签: java algorithm

我在我的例子中使用Math.PI,所以它是双倍的。这是一个简单的代码,但有一点我不知道该怎么做:

我希望代码计算Xsin函数的基本周期cos,并使用用户给出的乘数值an值初始化为n=1,是一个整数值。

如果(2 * pi * n)/a = X的结果低于pi,那么n应该递增,并且它应该一直持续到该数字是pi的倍数,然后打印结果

只是为了澄清:ax的乘数,它在函数sincos中是这样的:

cos(ax)

sin(ax)

我遇到麻烦的是弄清楚这个数字是pi的倍数(假设它已经大于pi,那就是)。

这是我所得到的,而且不完整。

 public void printSinusoidalPeriod(double multiplier /* this would be `a` */){

    double pi=Math.PI;

    double p = (2 * pi * (double) n) / multiplier;

    while(p<pi){

        if(n%pi==0){

            n=n+1;
            System.out.println(n);
                            p = (2 * pi * (double) n) / multiplier;
        }
    }
    p= (double)Math.round(p * 100) / 100;


    System.out.println("period of function is = " + p + " and n = " + n);
}

似乎它没有进入if语句并陷入了while循环

4 个答案:

答案 0 :(得分:1)

如果我理解正确

 while((2 * pi * n)/a)<pi)
    {
        if(!(n%pi==0))
        {
            n++;
            }
    }

y的多个部分是您需要自己弄清楚的部分。但这应该有助于你理解逻辑,如果我理解你的话。

答案 1 :(得分:1)

如果我理解你的问题,我必须在使用php之前解决类似的问题。不确定javascript的正确语法是什么,但也许你应该保持一个持续的计数器,直到(x / pi)是一个整数,表明它是pi的倍数..

我知道这不是正确的代码,但是类似于:

    while (!isint(x/pi)) {
    x++;
    }
    if (isint(x/pi)) {
    //CODE TO EXECUTE
    }

答案 2 :(得分:1)

您似乎正在计算

(2 * pi * n)/a = m * pi where m is some integer multiple.

所以

2 * pi * n = m * pi * a

2 * n = m * a

n = m * a / 2

您的其他约束是

(2 * pi * n)/ a&lt; PI

所以

2 * pi * n < pi * a
2 * n < a
n < a / 2;

要使两个方程都为真,m必须是小于1的整数,但由于你从1开始为n,它永远不会是真的。

答案 3 :(得分:0)

好的,这是我最后在这里的建议的帮助下完成的。

public void printSinusoidalPeriod(double a){

    double pi=Math.PI;
    double p=m*pi;

    while(n<a/2){

        if((double)Math.round((n*pi)%pi)!=0.01){

            n=n+1;

            m = (int) Math.round(((2 * (double) n) / a));
            p= (double)Math.round(m * pi * 100) / 100;
            p=p*n;

        }
    }
    System.out.println("period of function is = " + p + " and n = " + n);
    System.out.println("Check: p/n = " + p/n);
}

如果您发现逻辑问题,请告诉我。我还没有经历过很多可能性,但我所做的那些,看起来对我来说还不错。