我正在Java中学习一个类,一个练习要求递归地在int类型的数组中找到平均值(双精度),该方法将单个数组作为参数。我已经在这方面工作了一段时间,但还没有得出答案,有人可以将我引向正确的方向吗?
我能够将所有元素加在一起,但是当按数组的长度潜水时,我意识到每次以较小的值进入方法时,这种情况都会改变。
到目前为止的代码:
public static double findAverage(int[] classRoom) {
if(classRoom.length > 0) {
int grade = classRoom[0];
int[] newArray = new int[classRoom.length-1]; //create newArray with array length -1
System.arraycopy(classRoom, 1, newArray, 0, newArray.length);//copy array into array length -1
return grade + findAverage(newArray);
}
else
return 0;
}
我认为这是您需要的:
public static double findAverage(int[] classRoom) {
if (classRoom.length == 0)
return 0;
int grade = classRoom[0];
if (classRoom.length == 1)
return grade;
int[] newArray = new int[classRoom.length-1]; //create newArray with array length -1
System.arraycopy(classRoom, 1, newArray, 0, newArray.length);//copy array into array length -1
return (grade + findAverage(newArray) * newArray.length) / classRoom.length;
}
在最后一行中,您正在执行average * length
以获取总和,因此您可以对当前值求和,然后除以总长度(当然是newArray.length + 1
。