我需要找到多个家庭作业价值的偏差。为了做到这一点,我需要存储一个变量作业,即在for循环中,所以每次执行时它都会自行删除。此外,为了存储单独的作业得分值,我需要的变量数量是未知的,所以我不能只列出变量。我认为我需要做的是做一个数组列表,但我不确定我是否做得对。
这里是方法的代码,包括我创建的数组......
public double computeHomeworkDeviation(int homework){
int[] homeworkScore = new int[totalStudents];
if(computeHomeworkDeviationCounter < totalStudents){
homeworkScore[computeHomeworkDeviationCounter] = homework;
computeHomeworkDeviationCounter++;
}
else{
for(int k = 1; k <= totalStudents; k++){
top += Math.pow(homeworkScore[totalStudents - k] - homeworkAverage, 2);
}
homeworkDeviation = Math.sqrt(top / totalStudents);
}
return homeworkDeviation;
}
将此方法调用到for循环并调用需要存储在数组列表中的homework变量的参数。我有什么不工作,我做错了什么? (我不相信甚至存储数组值)
编辑: 我现在把它分成两种方法。
... setArrayMethod
public void setHomeworkArray(int homework){
homeworkScore[l] = homework;
l++;
}
... computeHomeworkDeviationMethod
public double computeHomeworkDeviation(int homework){
for(int k = 1; k <= totalStudents; k++){
top += Math.pow(homeworkScore[totalStudents - k] - homeworkAverage, 2);
}
homeworkDeviation = Math.sqrt(top / totalStudents);
return homeworkDeviation;
}
我仍然收到ArrayOutOfBoundsException错误。
答案 0 :(得分:1)
您的预感是正确的,值无法正确存储。我不确定你希望你的程序到底做什么,但我认为在数组中存储值时你需要一个循环而不是if
:
while(computeHomeworkDeviationCounter < totalStudents){
homeworkScore[computeHomeworkDeviationCounter] = homework;
computeHomeworkDeviationCounter++;
}
这也意味着您必须删除else
声明。最后,为避免错误,如果多次执行此方法,我建议在调用方法时重置变量computeHomeworkDeviationCounter
:
public double computeHomeworkDeviation(int homework){
int[] homeworkScore = new int[totalStudents];
computeHomeworkDeviationCounter = 0;
...如果它没有在其他任何地方使用,甚至将它作为方法局部变量:
public double computeHomeworkDeviation(int homework){
int[] homeworkScore = new int[totalStudents];
int computeHomeworkDeviationCounter = 0;
同样适用于变量top
,如果适用于你的其他程序。