【发布时间】:2014-07-07 09:46:02
【问题描述】:
我立即收到源自我的Student 类构造函数的运行时错误。这是我知道的唯一错误,但可能还有更多。
错误内容如下:
java.lang.IndexOutOfBoundsException:索引:0,大小:0
在 java.util.ArrayList.rangeCheck(ArrayList.java:635)
在 java.util.ArrayList.set(ArrayList.java:426)
在Student.(Student.java:11)
在 TestStudent.main(TestStudent.java:5)
在我的 IDE 中显示错误的图形:
这是更新后的代码:
import java.util.*;
public class Student {
private String name;
private ArrayList<Integer> quizList = new ArrayList<Integer>(5);
public Student(String name, int qz1, int qz2, int qz3, int qz4, int qz5) {
this.name = name;
int qz[] = {qz1, qz2, qz3, qz4, qz5};
for(int i = 0; i < qz.length; i++) {
quizList.add(qz[i]);
}
}
public String getName() {
return name;
}
public String setName(String name) {
return this.name = name;
}
public ArrayList<Integer> getQuizList() {
return quizList;
}
public int getQuiz(int location) {
return quizList.get(location);
}
public void setQuiz(int location, int qz) {
quizList.set(location, qz);
}
}
import java.util.*;
public class TestStudent {
public static void main(String [] args) {
ArrayList<Student> list = new ArrayList<Student>();
list.add(new Student("Mark Kennedy", 70, 80, 90, 100, 90));
list.add(new Student("Max Gerard", 80, 85, 90, 85, 80));
list.add(new Student("Jean Smith", 50, 79, 89, 99, 100));
list.add(new Student("Betty Farm", 85, 80, 85, 88, 89));
list.add(new Student("Dilbert Gamme", 70, 70, 90, 70, 80));
printBook(list);
}
public static void printBook(ArrayList<Student> list) {
for(Student token : list) {
System.out.print(token.getName() + "\t");
for(int i = 0; i < 5; i++) {
System.out.printf("%5d\t", token.getQuiz(i));
}
System.out.println();
}
}
public static void replaceName(ArrayList<Student> list, String find, String replace) {
int position = 0;
int values[] = new int[5];
for(int i = 0; i < list.size(); i++) {
values[i] = list.get(i).getQuiz(i);
}
for(int i = 0; i < list.size(); i++) {
if (list.get(i).getName().equals(find)) {
list.get(i).setName(replace);
}
}
}
public static void replaceQuiz(ArrayList<Student> list, String find, int quizNum, int replace) {
for(int i = 0; i < list.size(); i++) {
if (list.get(i).getName().equals(find)) {
list.get(i).setQuiz((quizNum-1), replace);
}
}
}
public static void replaceStudent(ArrayList<Student> list, String find, Student replacement) {
insertStudent(list, find, replacement.getName());
deleteStudent(list, find);
}
public static void insertStudent(ArrayList<Student> list, String find, String name) {
int position = 0;
int values[] = new int[5];
for(int i = 0; i < list.size(); i++) {
values[i] = list.get(i).getQuiz(i);
}
for(int i = 0; i < list.size(); i++) {
if(list.get(i).getName().equals(find)) {
position = i;
}
}
list.add(position, new Student(name, values[0], values[1], values[2], values[3], values[4]));
}
public static void deleteStudent(ArrayList<Student> list, String find) {
int location = 0;
int i;
for(i = 0; i < list.size(); i++) {
if (list.get(i).getName().equals(find)) {
location = i;
break;
}
}
if (i != list.size()) {
list.remove(location);
}
}
}
更新:
修改了Student中的一点代码:
private String name;
private ArrayList<Integer> quizList;
public Student(String name, int qz1, int qz2, int qz3, int qz4, int qz5) {
this.name = name;
int qz[] = {qz1, qz2, qz3, qz4, qz5};
for(int i = 0; i < qz.length; i++) {
quizList.add(qz[i]);
}
}
现在抛出此错误:
java.lang.NullPointerException
在Student.(Student.java:9)
在 TestStudent.main(TestStudent.java:5)
【问题讨论】:
-
您只能将对象保存到数组列表中,不能保存原始数据类型值
-
@RajeshKumar 自动装箱
标签: java arrays object arraylist runtime-error