所以当我的老师离开时我得到了这个任务,基本上我必须做一个学生项目。学生有姓名,分数和平均分。为了计算平均值,我决定将标记存储在int[]
数组中。
public void addQuiz(int m)
{
int l = (marks.length);
marks[l] = m;
}
int[] marks = new int[8];
但是当我运行该功能时:
student.addQuiz(90);
我明白了:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8
任何帮助?
我不确定int[8]
部分是做什么的,但它出现在我所遵循的教程中,如果没有它,它会给我一个null
指针。总共有8个标记,所以我只做了8个。
答案 0 :(得分:8)
您无法动态地向数组添加内容。您应该使用数组列表。
Arraylist<Integer> marks = new ArrayList<Integer>();
然后在你的addQuiz方法中:
public void addQuiz(int m) {
marks.add(m)
}
您可能还需要更改计算平均值的方法,但这应该是微不足道的,我会留给您。
答案 1 :(得分:5)
错误说明:ArrayIndexOutOfBoundsException:8
你有一个包含8个元素的数组,索引从0到7(含)。这个数组的长度为8,当你只能达到7时,你实际上是在尝试访问标记[8]。
答案 2 :(得分:4)
在Java中,Array索引从'0'开始。所以,你不能访问数组的索引等于数组的长度。如果你的数组长度是'8',那么数组的最后一个索引是'7'而不是'8'。如果您尝试访问该数组的非法索引,则抛出ArrayIndexOutOfBoundException
。代码应更改为
public void addQuiz(int m)
{
int l = (marks.length); //assuming marks is an array of length '8'
marks[l-1] = m; //index is 7 now
}
要计算平均值,您需要总结数组的内容(假设所有值都是int值),然后除以数组的长度
int sum = 0;
int avg = 0;
for(int i=0; i<array.length;i++){
sum =sum+array[i];
}
avg = sum/array.length;
希望这能给出一个想法
答案 3 :(得分:2)
使用Arraylist<Integer>
,然后您可以动态添加到列表
答案 4 :(得分:1)
此数组中没有此marks[l] = m;
的索引。使用marks[l-1] = m;
答案 5 :(得分:0)
你可以在main中调用 for 循环来获得8次标记。
for(int i=0;i<8;i++)
student.addQuiz(<marks you want to enter>, i);
您可以定义addQuiz函数,如下所示
public void addQuiz(int m, int arrayIndex)
{
marks[arrayIndex] = m;
}
int [] marks = new int [8]; //这将是原样
这些都是微小的变化。您可以通过将数组标记作为参数传递给addQuiz来使代码更好。但这也可行,只是这不是编写代码的最佳方式。