具有多个变量的循环

Posted

技术标签:

【中文标题】具有多个变量的循环【英文标题】:Loops With Multiple Variables 【发布时间】:2014-01-07 02:38:49 【问题描述】:

我希望我的程序计算从 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++;
    

【问题讨论】:

括号编辑是一个解决方案,还是只是一个更正? (您还有问题吗?) 这是我不久前做过的标准偏差***.com/questions/18390548/… 【参考方案1】:

首先,您需要在每个内部循环之后重置您的 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 的一个很好的用例,可以避免由于忘记重置计数变量而导致的错误。 :)

编辑 - 具有适当循环执行次数的 for 循环版本:

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 步。

【讨论】:

是的,虽然我不确定输出是否正确 是的,supercount 在错误的位置递增。照原样,外循环将执行 140 次,总共执行 2800 次内循环。将supercount++ 移动到内部循环,以确保总共执行 140 次,并查看输出是否更接近您的预期。【参考方案2】:

我并不完全清楚您要做什么,但是您应该将每个循环都用大括号括起来,即while (cond) body em>

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

while(supercount < 140)

    while (count < 20)
    
        ...
    


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

stnrd = stnrd + 1.0;    
supercount++;

我猜你想在第一个 while 循环的主体中使用最后一部分。

【讨论】:

以上是关于具有多个变量的循环的主要内容,如果未能解决你的问题,请参考以下文章

bwa 示例的 bash 循环中的多个变量

循环变量定义 R

PowerShell/CLI:具有多个数组的“Foreach”循环

如何创建多个不同的滞后

对于具有 NULL 值的循环变量

使用循环创建多个变量