0

我需要找到多个作业值的偏差。为了做到这一点,我需要存储一个变量作业,即在 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 循环并调用需要存储在数组列表中的作业变量的参数。我有什么不工作,我做错了什么?(我不相信数组值甚至被存储)

编辑:我现在把它分成两种方法。

设置数组方法...

 public void setHomeworkArray(int homework){
    homeworkScore[l] = homework;
    l++;
}

计算作业偏差方法...

 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 错误。

4

1 回答 1

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如果适用于程序的其余部分,同样适用于变量。

于 2013-11-01T23:28:32.527 回答