2017-04-02 29 views
0

我被困在試圖計算1和20之間的3個隨機整數的平均值。我必須將平均值舍入爲int並重復10000次。當我測試的程序重複2次,我得到的輸出:循環中的Rnd數的平均值java

Number is :18 
Number is :14 
Number is :2 
sum is: 34 
Average is: 11 

Number is :13 
Number is :3 
Number is :6 
sum is: 56 
Average is: 18 

但平均應該只是3個數字的平均值。這裏,第二個循環將第一個循環的總和與第二個循環的總和相加,從而使平均值錯誤(總和:34 + 22 = 56)。我希望它是22,所以平均值爲7.我注意到問題可能是這條線,sum + = n; ,但我不知道另一種方法來爲每個循環添加3個數字來獲得平均值。

package Histogram; 

import java.util.Random; 

public class RandomNumbers { 
    public static void main(String[] args) { 
     final int N = 2; 
     Random rand = new Random(); 
     int n; 
     int average; 
     int sum = 0; 

     for (int a = 0; a < N; a++) { 
      for (int i = 0; i < 3; i++) { 
       n = rand.nextInt(20) + 1; 
       System.out.println("Number is :" + n); 
       sum += n; 
      } 
      average = sum/3; 

     System.out.println("sum is: " + sum); 
     System.out.println("Average is: " + average); 

     } 

    } 
} 
+0

你可以你計算出的平均後sum'重置'爲0。 –

+0

您必須確保在正確的位置將'sum'初始化爲0。 – ajb

+1

事實上,你甚至不應該在外層循環之外聲明n,sum和average。 n應該在內部循環中聲明,sum和average應該在外部循環中聲明。下一步是提取內部循環的主體,計算平均值,轉化爲它自己的方法。始終儘可能縮小變量的範圍。對您的方法承擔一項責任。 –

回答

0

如果你想總和我建議增加一個第二iterationSum變量增加了3個數字。喜歡的東西:

for (int a = 0; a < N; a++) { 
    int iterationSum = 0; 
    for (int i = 0; i < 3; i++) { 
     ... 
     iterationSum += n; 
    } 
    average = iterationSum/3; 
    ... 
} 

如果你不關心總和只是重置你總結爲0每次迭代:

for (int a = 0; a < N; a++) { 
    sum = 0; 
    ... 
} 
1

平均應該只是3個數字的平均值。這裏, 第二個循環將第一個循環的總和與第二個循環的總和相加,從而使平均值錯誤(總和:34 + 22 = 56)。我想這是22所以 平均水平,這將是7

一種方法是你打印的sumaverage到控制檯後重置的sum值。

例子:

int n; 
int average; 
int sum = 0; 

for (int a = 0; a < N; a++) { 
    for (int i = 0; i < 3; i++) { 
     n = rand.nextInt(20) + 1; 
     System.out.println("Number is :" + n); 
     sum += n; 
    } 
    average = sum/3; 

    System.out.println("sum is: " + sum); 
    System.out.println("Average is: " + average); 
    sum = 0; 
} 

或使生活更輕鬆,你可以把這些變量sum內環路地方,這樣在每次迭代sum值將重置爲默認值:

例如:

int n; 
int average = 0; 
for (int a = 0; a < N; a++) { 
    int sum = 0; 
    for (int i = 0; i < 3; i++) { 
     n = rand.nextInt(20) + 1; 
     System.out.println("Number is :" + n); 
     sum += n; 
    } 
    average = sum/3; 

    System.out.println("sum is: " + sum); 
    System.out.println("Average is: " + average); 
} 
1

您的sum += n;在第二個for循環內不斷遞增sum的值(即使是較舊的循環總和值)。因此,您需要在開始第一個循環時將sum的值重置爲0。

for (int a = 0; a < N; a++) { 
    sum = 0; 
    //rest of the code 
0
public static void main(String[] args) { 
    final int N = 2; 
    Random rand = new Random(); 
    int n; 
    int average; 
    int sum = 0; 

    for (int a = 0; a < N; a++) { 
     sum=0;// this makes the trick 
     for (int i = 0; i < 3; i++) { 
      n = rand.nextInt(20) + 1; 
      System.out.println("Number is :" + n); 
      sum += n; 
     } 
     average = sum/3; 

    System.out.println("sum is: " + sum); 
    System.out.println("Average is: " + average); 

    } 

} 
1

你必須在第一循環之後清潔sum變量:

//.. 
int sum; 

for (int a = 0; a < N; a++) { 
    sum = 0; // -------> Here it is necessary to be clean for the next iteration 
    for (int i = 0; i < 3; i++) { 
     n = rand.nextInt(20) + 1; 
     System.out.println("Number is :" + n); 
     sum += n; 
    } 
//... 
}