临时整数未重置

时间:2017-03-21 18:38:46

标签: java

我正在使用另一个类来创建直方图以帮助显示它,但这对我的问题并不重要。让我先来看看我的代码

public class DisplayHistogram {

  public static void main(String[] args) {
    int temp = 0;
    int holder = 0;
    int average;
    Random rand = new Random();
    Histogram x = new Histogram(1, 20);

    for(int i = 0; i<=10000; i++)
    {
        for(int j = 0; j<=3; j++)
        {
            temp = rand.nextInt(20) + 1;
            holder = holder + temp;
        }
        average = Math.round(holder / 3);
        x.submit(average);
    }
    System.out.println(x.toString());
 }

 }

我遇到的问题是我将直方图设置为最小值为1且最大值为20.我生成三个随机整数并找到3的平均值并将其提交给直方图10,000次。但是,在10000的第一个循环之后,“holder”变量不会重置为0,导致我的程序尝试提交超出最大值的值,并产生错误。我试图通过

在每个循环结束时将持有者设置为0
 x.submit(average);
 holder = 0;
 temp = 0;

然而这没有帮助。

我已经尝试了一些建议,使我的代码看起来像

import java.util.*;
public class DisplayHistogram {

public static void main(String[] args) {
Random rand = new Random();
Histogram x = new Histogram(1, 20);

for(int i = 0; i<=10000; i++)
{
    int temp = 0;
    int holder = 0;
    int average = 0;
    for(int j = 0; j<=3; j++)
    {
        temp = rand.nextInt(20) + 1;
        holder = holder + temp;
    }
    average = Math.round(holder / 3);
    x.submit(average);
}
System.out.println(x.toString());
}

}

然而它仍然会返回此错误

 Exception in thread "main" HistogramOutOfBoundsException: 
 *******
 Submitted value 22 is outside range [1,20] of Histogram.
 *******

at Histogram.submit(Histogram.java:31)
at DisplayHistogram.main(DisplayHistogram.java:19)

3 个答案:

答案 0 :(得分:0)

像这样编写你的循环:

   for(int i = 0; i<=10000; i++)
    {
        holder = 0; // add this line
        for(int j = 0; j<=3; j++)
        {
            temp = rand.nextInt(20) + 1;
            holder = holder + temp;
        }
        average = Math.round(holder / 3);
        x.submit(average);
    }
    System.out.println(x.toString());
 }

答案 1 :(得分:0)

固定。循环四次而不是三次。对于循环应该看起来像

 for(int i=0; i<=2; i++)

答案 2 :(得分:0)

简短回答

注意细节。

你想要的答案

与其他答案不同, 不要只是每个循环初始化holder变量。 相反,将holder变量的范围最小化到循环中。

  public static void main(String[] args)
  {
    int average;
    Random rand = new Random();
    Histogram x = new Histogram(1, 20);

    for (final int trialCount = 0; trialCount <= 10000; ++trialCount)
    {
        int holder = 0;

        for (final int sampleCount = 0; sampleCount <= 3; ++sampleCount)
        {
            int temp = rand.nextInt(20) + 1;
            holder += temp;
        }

        average = Math.round(holder / 3);
        x.submit(average);
    }
    System.out.println(x.toString());
 }
相关问题