具有多个变量的循环
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
循环的主体中使用最后一部分。
【讨论】:
以上是关于具有多个变量的循环的主要内容,如果未能解决你的问题,请参考以下文章