所以在浏览了这里和其他网站上已经问过的问题之后,我想我会给它一个机会。
我正在进行一项练习,要求您在Java中设置一个程序,该程序接受10个数字的输入并计算平均值(平均值)和标准偏差并输出它们。
我的问题是,当我运行程序,然后输入我想要的10个值并按Enter键时,没有任何反应。由于某种原因,循环后发生的系统打印输出没有被执行。循环中的println不是必需的,但只是为了表明在循环运行时正确计算值,它们是。
我的目标是将myValues分配给的当前值添加到sum1,并将myValues的平方添加到sqrdSum。 sqrdSum只是我用来对输入值的平方求和的变量,这样程序后面的标准偏差计算就会更清晰。
正如预期的那样,我不是要为我做这个,只是关于如何调整我的代码的一些建议,以便在循环执行后发生的printlns。我期待它与我的逻辑有关,但无法弄明白。希望这是我设法错过的简单。
感谢。
到目前为止,我已经使用for循环进行了设置:
int n = 10;
double sum1 = 0.0;
double sqrdSum = 0.0;
double mean1 = sum1 / n;
double std1 = Math.pow((sqrdSum - (Math.pow(sum1, 2) / n)) / (n-1), 0.5);
Scanner input1 = new Scanner(System.in);
System.out.println("Enter 10 numbers: ");
double myValues = input1.nextDouble();
for (int count = 0; count <= n; count++) {
sum1 += myValues;
sqrdSum += Math.pow(myValues, 2);
System.out.println(sum1 + " " + sqrdSum); //this is to test to see if the loop is calculating correctly.
myValues = input1.nextDouble();
}
System.out.print("The mean of your values is: " + mean1);
System.out.print("The standard deviation of your values is: " + std1);
//Test values: 1 2 3 4.5 5.6 6 7 8 9 10
//Should give a mean of 5.61
//std of 2.99794
答案 0 :(得分:1)
问题是,input1.nextDouble()
阻塞,直到输入下一个数字。您正在输入10个数字,但是您需要11个输入,因为您有这一行
double myValues = input1.nextDouble();
执行一次和
myValues = input1.nextDouble();
循环内执行11次。只需在循环开始时移动它:
Scanner input1 = new Scanner(System.in);
System.out.println("Enter 10 numbers: ");
double myValues = 0;
for (int count = 0; count < n; count++) {
double myValues = input1.nextDouble();
sum1 += myValues;
sqrdSum += Math.pow(myValues, 2);
System.out.println(sum1 + " " + sqrdSum); //this is to test to see if the loop is calculating correctly.
}
正如布莱恩所说,你也有一个一个一个错误。从0开始,但计数到10,这将产生11个循环周期。将<=
更改为<
答案 1 :(得分:0)
只需在您的周期中将count <= n
更改为count < n
即可。你不小心期待一个太多的价值观。
答案 2 :(得分:0)
虽然给出的答案确实解决了您的原始问题,但您的代码还存在另一个问题。由于你如何启动它,然后在你的for循环之后没有将它设置为任何值,你将无法得到正确的均值。
int n = 10;
double sum1 = 0.0;
double sqrdSum = 0.0;
double mean1 = sum1 / n;
double std1 = Math.pow((sqrdSum - (Math.pow(sum1, 2) / n)) / (n-1), 0.5);
上面的行应该是
int n = 10;
double sum1 = 0.0;
double sqrdSum = 0.0;
double mean1 = 0.0;
double std1 = 0.0;
然后在你的for循环之后你应该像下面的代码一样计算mean1
和std1
。
int n = 10;
double sum1 = 0.0;
double sqrdSum = 0.0;
double mean1 = 0.0;
double std1 = 0.0;
Scanner input1 = new Scanner(System.in);
System.out.println("Enter 10 numbers: ");
double myValues = 0.0;
for (int count = 0; count < n; count++) {
myValues = input1.nextDouble();
sum1 += myValues;
sqrdSum += Math.pow(myValues, 2);
System.out.println(sum1 + " " + sqrdSum); //this is to test to see if the loop is calculating correctly.
}
mean1 = sum1 / n;
std1 = Math.pow((sqrdSum - (Math.pow(sum1, 2) / n)) / (n-1), 0.5);
System.out.print("The mean of your values is: " + mean1);
System.out.print("The standard deviation of your values is: " + std1);
//Test values: 1 2 3 4.5 5.6 6 7 8 9 10
//Should give a mean of 5.61
//std of 2.99794