2017-04-02 37 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; 
    } 
//... 
}