我希望我的程序计算从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++;
}
}
答案 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
循环体内的最后一部分。