多个变量的循环

时间:2013-12-18 19:00:22

标签: java loops statistics logic

我希望我的程序计算从x = -2.0到x = 2.0的值。我也希望它能够将标准差的值从-3.0调整到3.0。表格中应该总共有140个输出。但是我遇到了麻烦,让标准偏差值发生变化。到目前为止,我所尝试的一切只是在一组标准偏差下输出x。如何修改外部循环以通过x再次执行运行并保持所有输出?这是我到目前为止所提出的,但没有取得任何成功:

import java.lang.Math;
import java.util.Arrays;
public class STable {

public static void main (String[] args)
{
    double exponent,  x, pi, e, sqrtpart, y, stnrd, mean;

    mean = 0;
    stnrd = -3.0;
    pi = 3.14159;
    e = 2.71828;
    x = -2.0;
    int count = 0;
    int supercount = 0;

    while (supercount < 140)
    {   
        while (count < 20)
        {
            exponent = - ((x-mean)*(x-mean)/(2.0*stnrd));
            sqrtpart = Math.sqrt(2*pi);
            y = (Math.pow(e,exponent))/sqrtpart;

            System.out.print(" " + y);
            x = x + 0.2;
            count++;
        }

        x=-2.0;
        System.out.println("\n");

        stnrd = stnrd + 1.0;    
        supercount++;
    }
}

2 个答案:

答案 0 :(得分:3)

首先,您需要在每个内循环后重置count变量。否则在外循环的所有后续传递中,count仍为20,因此内循环将不会执行。

其次,我不认为外部循环适用于所有内容,因为您没有使用括号来声明其范围。

当我稍微修改您的代码时:

public class STable {

    public static void main (String[] args)
    {


        double exponent,  x, pi, e, sqrtpart, y, stnrd, mean;

        mean = 0;
        stnrd = -3.0;
        pi = 3.14159;
        e = 2.71828;
        x = -2.0;
        int count = 0;
        int supercount = 0;

        while (supercount < 140) {



        while (count < 20)
        {

            exponent = - ((x-mean)*(x-mean)/(2.0*stnrd));

            sqrtpart = Math.sqrt(2*pi);


        y = (Math.pow(e,exponent))/sqrtpart;

        System.out.print(" " + y);
        x = x + 0.2;
        count++;
        }

        x=-2.0;
        count = 0;
        System.out.println("\n");

        stnrd = stnrd + 1.0;    
        supercount++;




        }
    }
}

我得到了我相信你正在寻找的输出。

作为旁注,这是for loop的一个很好的用例,以避免由于忘记重置计数变量而导致的错误。 :)

编辑 - 具有正确循环执行计数的循环版本:

public class STable {

    public static void main(String[] args) {

        double exponent, pi, e, sqrtpart, y, mean;

        mean = 0;
        pi = 3.14159;
        e = 2.71828;
        for (double stnrd = -3.0; stnrd <= 3.0; stnrd += 1) {
            double x = -2.0;
            for (int i = 0; i < 21; i++) {
                exponent = -((x - mean) * (x - mean) / (2.0 * stnrd));

                sqrtpart = Math.sqrt(2 * pi);

                y = (Math.pow(e, exponent)) / sqrtpart;

                System.out.print(" " + y);
                x += 0.2;
            }
            System.out.println("\n");
        }
    }
}

请注意,我更新了内循环以运行21次,因为从-2.0到2.0有21个包含0.2步。

答案 1 :(得分:0)

我并不完全清楚你要做的是什么,但是你应该将每个循环包裹在大括号中,即     while cond ){ body }

请注意,您的第一个while循环没有包裹其正文的任何​​大括号,这意味着您的代码实际上与

相同
while(supercount < 140)
{
    while (count < 20)
    {
        ...
    }
}

x=-2.0;
System.out.println("\n");

stnrd = stnrd + 1.0;    
supercount++;

我猜你想要在第一个while循环体内的最后一部分。