Java 相对于构造函数引发的越界运行时错误

Java 相对于构造函数引发的越界运行时错误,java,arrays,object,arraylist,runtime-error,Java,Arrays,Object,Arraylist,Runtime Error,我立即得到一个源于我的学生类构造函数的运行时错误。这是我意识到的唯一一个错误,但可能还有更多 错误内容如下: java.lang.IndexOutOfBoundsException:索引:0,大小:0 位于java.util.ArrayList.rangeCheck(ArrayList.java:635) 位于java.util.ArrayList.set(ArrayList.java:426) 学生时代。(Student.java:11) 位于TestStudent.main(TestStud

我立即得到一个源于我的
学生
类构造函数的运行时错误。这是我意识到的唯一一个错误,但可能还有更多

错误内容如下:

java.lang.IndexOutOfBoundsException:索引:0,大小:0

位于java.util.ArrayList.rangeCheck(ArrayList.java:635)

位于java.util.ArrayList.set(ArrayList.java:426)

学生时代。(Student.java:11)

位于TestStudent.main(TestStudent.java:5)

显示my 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);
        }
    }
}
现在抛出此错误:

java.lang.NullPointerException

学生时代。(Student.java:9)

位于TestStudent.main(TestStudent.java:5)

ArrayList(int i)
不会使您的
ArrayList
具有
i
的初始大小,就像
int[5]
使数组具有
i
的初始长度一样。它所做的是将内部支持数组的大小初始化为
i
,同时将实际的
ArrayList
完全保留为空。出于所有目的,您的
ArrayList
是一个没有元素的空数组

因此,当您尝试将
ArrayList
中的任何元素设置为其他元素时,会出现一个小问题,即没有可设置的元素,因为其中没有任何元素

您必须先将元素添加到
ArrayList
中,然后才能将其中的元素更改为其他内容。

ArrayList(int i)
不会使
ArrayList
的初始大小为
i
int[5]
使数组的初始长度为
i
相同。它所做的是将内部支持数组的大小初始化为
i
,同时将实际的
ArrayList
完全保留为空。出于所有目的,您的
ArrayList
是一个没有元素的空数组

因此,当您尝试将
ArrayList
中的任何元素设置为其他元素时,会出现一个小问题,即没有可设置的元素,因为其中没有任何元素

您必须先将元素添加到
ArrayList
,然后才能将其中的元素更改为其他内容。

使用
quizList.add(qz[i])
而不是
quizList.set(i,qz[i])要将对象设置到特定位置的点处的列表为空

:

IndexOutOfBoundsException-如果索引超出范围(索引<0 | |索引>=size())

要更新,请执行以下操作:

您删除了行
quizList=newarraylist(5)。它会初始化您的列表。您需要将这一行放在适当的位置,否则没有可以添加对象的列表。
NullPointerException
始终表示未创建对象,您希望从中读取/写入对象。

使用
quizList.add(qz[i])
而不是
quizList.set(i,qz[i])要将对象设置到特定位置的点处的列表为空

:

IndexOutOfBoundsException-如果索引超出范围(索引<0 | |索引>=size())

要更新,请执行以下操作:


您删除了行
quizList=newarraylist(5)。它会初始化您的列表。您需要将这一行放在适当的位置,否则没有可以添加对象的列表。
NullPointerException
始终表示未创建要从中读取/写入的对象。

带有int的ArrayList构造函数指定初始容量,而不是大小。由于arraylist中没有元素,因此大小仍然为零。这就是set方法失败的原因,因为它首先检查大小。为什么不改用add()呢


,E)

带有int的ArrayList构造函数指定初始容量,而不是大小。由于arraylist中没有元素,因此大小仍然为零。这就是set方法失败的原因,因为它首先检查大小。为什么不改用add()呢


,E)

您只能将对象保存到arraylist,而不能保存原始数据类型values@RajeshKumar自动装箱您只能将对象保存到arraylist,而不能保存原始数据类型values@RajeshKumar学生处的自动装箱
java.lang.NullPointerException。(Student.java:10)TestStudent.main(TestStudent.java:5)
知道是什么导致了这个NullPointerException吗?@alx:请看我的更新。您需要ceep这一行
quizList=newarraylist(5)到位。谢谢你的帮助和友好。至少一些社区成员喜欢提供帮助,并且不会因为人们缺乏经验而投票反对。
java.lang.NullPointerException At Student.(Student.java:10)At TestStudent.main(TestStudent.java:5)
知道是什么导致了这种NullPointerException吗?@alx:查看我的更新。您需要ceep这一行
quizList=newarraylist(5)到位。谢谢你的帮助和友好。至少有一些社区成员喜欢帮忙,不会因为人们经验不足而投票反对。
    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]);
        }
    }