簡體   English   中英

循環結束后字符串未打印出來

[英]String not printing out after conclusion of 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

問題是, 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.
}

正如Brian所指出的,您也有一個錯誤的錯誤。 您從0開始,但數到10,則產生11個循環周期。 <=更改為<

只要改變count <= ncount < n在你的周期。 您意外地期望一個太多的值。

雖然給出的答案確實解決了您的原始問題,但是您的代碼也存在另一個問題。 由於如何初始化它,然后在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM