循环结束后字符串不打印出来

时间:2014-02-19 20:11:50

标签: java for-loop

所以在浏览了这里和其他网站上已经问过的问题之后,我想我会给它一个机会。

我正在进行一项练习,要求您在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

3 个答案:

答案 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循环之后你应该像下面的代码一样计算mean1std1

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