【发布时间】:2015-08-27 15:56:49
【问题描述】:
这是我遇到的一个 Java 问题,我对 Java 有点陌生。
我必须:
生成随机分数
继续生成直到总和大于 1
那么我必须显示我生成了多少个数字以及哪些数字
这是我目前的功能:
public static double calcAvg(int numOfTimes){
double sumOfRand = 0 ;
int numOffractions = 0;
double avg = 0;
double numOfAvg[] = new double[numOfTimes]; // number of rows
double randNums[] = new double[] {.1,.2,.3,.4,.5,.6,.7,.8,.9};
Random rand = new Random();
for(int i = 0; sumOfRand <= 1; i++){
int randNum = rand.nextInt(randNums.length); //gets a number from array randomly
//System.out.println(randNums[randNum]);
sumOfRand += randNums[randNum]; //adds it to the sum
numOffractions++; //counts # of avgnums needed for > 1
numOfAvg[i] = numOffractions;
}
avg = (numOfAvg[0] + numOfAvg[1] + numOfAvg[2]) /(numOfTimes);
return avg;
}
我不断收到错误消息:numOfAvg[i] = numOffractions;
而且我似乎无法将分数添加到总和中,直到它们通过 1。
【问题讨论】:
-
分配
numOfAvg[i] = numOffractions;时得到的错误信息是什么? -
@SurrealDreams 我确定是
IndexOutOfBounds,但问题陈述不清楚,他从不告诉我们numOfTimes应该是什么。 -
顺便说一句,您不需要 randNums 数组。只需生成 1 到 9 之间的随机数,而不是 0 到 8 之间的随机数。
-
错误如下:
double[] numOfAvg被初始化为长度numOfTimes,但在for循环内部,i是索引,即处理numOfAvg的值。i的范围可能与numOfTimes的大小有很大不同。当分数的数量 >numOfTimes时,这会导致IndexOutOfBoundsException。 -
你的 for 循环正确吗?你的条件部分没有'i'。