Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多变量循环_Java_Loops_Statistics_Logic - Fatal编程技术网

Java 多变量循环

Java 多变量循环,java,loops,statistics,logic,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 ma

我希望我的程序计算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++;
    }
}
import java.lang.Math;
导入java.util.array;
公务舱马厩{
公共静态void main(字符串[]args)
{
双指数,x,pi,e,sqrtpart,y,stnrd,均值;
平均值=0;
stnrd=-3.0;
pi=3.14159;
e=2.71828;
x=-2.0;
整数计数=0;
int超级计数=0;
while(超级计数<140)
{   
同时(计数<20)
{
指数=-((x-平均值)*(x-平均值)/(2.0*stnrd));
sqrtpart=Math.sqrt(2*pi);
y=(数学功率(e,指数))/sqrtpart;
系统输出打印(“+y”);
x=x+0.2;
计数++;
}
x=-2.0;
System.out.println(“\n”);
stnrd=stnrd+1.0;
超级计数++;
}
}

首先,您需要在每个内部循环后重置
计数
变量。否则,在外部循环的所有后续过程中,
计数
仍将为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++;




        }
    }
}
公共类稳定{
公共静态void main(字符串[]args)
{
双指数,x,pi,e,sqrtpart,y,stnrd,均值;
平均值=0;
stnrd=-3.0;
pi=3.14159;
e=2.71828;
x=-2.0;
整数计数=0;
int超级计数=0;
while(超级计数<140){
同时(计数<20)
{
指数=-((x-平均值)*(x-平均值)/(2.0*stnrd));
sqrtpart=Math.sqrt(2*pi);
y=(数学功率(e,指数))/sqrtpart;
系统输出打印(“+y”);
x=x+0.2;
计数++;
}
x=-2.0;
计数=0;
System.out.println(“\n”);
stnrd=stnrd+1.0;
超级计数++;
}
}
}
我得到了你想要的结果

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

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

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");
        }
    }
}
公共类稳定{
公共静态void main(字符串[]args){
双指数,pi,e,sqrtpart,y,平均值;
平均值=0;
pi=3.14159;
e=2.71828;

对于(double stnrd=-3.0;stnrd我并不完全清楚您想做什么,但您应该用大括号括住每个循环,即
(cond){body}

请注意,您的第一个
while
循环的主体没有任何大括号,这意味着您的代码实际上与

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

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

stnrd = stnrd + 1.0;    
supercount++;
while(超级计数<140)
{
同时(计数<20)
{
...
}
}
x=-2.0;
System.out.println(“\n”);
stnrd=stnrd+1.0;
超级计数++;

我猜你希望最后一个部分在第一个
中,而
循环的主体中。

括号编辑是解决方案,还是仅仅是纠正?(你仍然有问题吗?)这是我前一段时间做的一个标准偏差是的,似乎有效,尽管我不确定输出是否正确是的,
supercount
在错误的位置递增。照此,外部循环将执行140次,总共执行2800次内部循环。将
supercount++
移动到内部循环,以确保140次总执行次数然后查看输出是否更接近预期。