我正在使用另一个类来创建直方图以帮助显示它,但这对我的问题并不重要。让我先来看看我的代码
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)
答案 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());
}