Java 在我的教师课堂上的线程主错误中获取异常

Java 在我的教师课堂上的线程主错误中获取异常,java,Java,如前所述,您正在Person类中的address实例变量上调用toString,但从未实例化该变量,这意味着它具有对象的默认值:null 如果尝试调用非实例化变量的成员,它将抛出NullPointerException Exception in thread "main" java.lang.NullPointerException at Person.toString(Person.java:30) at FacultyMember.toString(FacultyMember

如前所述,您正在Person类中的address实例变量上调用toString,但从未实例化该变量,这意味着它具有对象的默认值:null

如果尝试调用非实例化变量的成员,它将抛出NullPointerException

Exception in thread "main" java.lang.NullPointerException
    at Person.toString(Person.java:30)
    at FacultyMember.toString(FacultyMember.java:33)
    at Driver.main(Driver.java:83)
删除对address的toString调用,或者确保实例化它

尽管如此,您的代码仍有许多地方可以改进:

代码如下:

public String toString() {
        return "Name: " + name + " "+"Address: " + address.toString();

    }
这不是有效的。我想我们都可以同意,如果choice==6,choice永远不会(同时)有7、8或9的值,但你仍然要测试它们

一种改进方法是使用else语句:

if (choice == 6) {
                    removeCourse();

                }
                if (choice == 7) {
                    addFaculty();
                }
                if (choice == 8) { // LIST OF FACULTY
                    String d1 = "";
                    for (FacultyMember d : faculty) {
                        // b.toString();
                        d1 = d1 + d.toString() + "\n";

                    }
                    JOptionPane.showMessageDialog(null, d1);
                }
                if (choice == 9) { // REMOVE FACULTY
                    removeFaculty();
                }
当您执行此操作时,如果choice已经在以前的测试中找到它所具有的值,它将不会检查choice是否具有其中一个值。因此,如果choice==6,它将不会测试7、8或9

尽管这本书好多了,但它仍然不太容易阅读。switch语句在这里有帮助:

if (choice == 6) {
                    removeCourse();

                }else if (choice == 7) {
                    addFaculty();
                } else if (choice == 8) { // LIST OF FACULTY
                    String d1 = "";
                    for (FacultyMember d : faculty) {
                        // b.toString();
                        d1 = d1 + d.toString() + "\n";

                    }
                    JOptionPane.showMessageDialog(null, d1);
                }else if (choice == 9) { // REMOVE FACULTY
                    removeFaculty();
                }
添加适当的缩进,代码的维护就会容易得多


毫无疑问,您还有很多可以改进的地方,但这会给您一些东西作为起点。

代码中的哪一行?似乎您还没有发布引发异常的代码。检查Person类和FacultyMember类。请向Person类显示您没有设置地址,但您调用了toString。所以,你调用一个未初始化的变量(它是null)上的toString导致NullPointerExceptionMy bad它在几秒钟前添加了这个问题你解决了吗?我有一个问题,我如何才能做到这一点,一种分配教员教授现有课程的方法。当学生添加或指定教员教授@StultusKeyYou时,不要创建新课程您可以在FacultyMember类中使用实例变量(不知道正确的名称)。一个名为“teachesClasses”的列表,您只需执行如下操作:myFacultyMember.addClass(myCourse);在其中设置teachesClasses.add(myCourse);或者,您可以有一个FacultyMember类型的实例变量(也可以是一个列表,具体取决于需求),名为isToughtBy myCourse.setToughtBy(myFacultyMember);
if (choice == 6) {
                    removeCourse();

                }
                if (choice == 7) {
                    addFaculty();
                }
                if (choice == 8) { // LIST OF FACULTY
                    String d1 = "";
                    for (FacultyMember d : faculty) {
                        // b.toString();
                        d1 = d1 + d.toString() + "\n";

                    }
                    JOptionPane.showMessageDialog(null, d1);
                }
                if (choice == 9) { // REMOVE FACULTY
                    removeFaculty();
                }
if (choice == 6) {
                    removeCourse();

                }else if (choice == 7) {
                    addFaculty();
                } else if (choice == 8) { // LIST OF FACULTY
                    String d1 = "";
                    for (FacultyMember d : faculty) {
                        // b.toString();
                        d1 = d1 + d.toString() + "\n";

                    }
                    JOptionPane.showMessageDialog(null, d1);
                }else if (choice == 9) { // REMOVE FACULTY
                    removeFaculty();
                }
switch(choice){
case 6: removeCourse();
        break;
case 7: addFaculty();
        break;
case 8: String d1 = "";
        for (FacultyMember d : faculty) {
        // b.toString();
        d1 = d1 + d.toString() + "\n";}
        JOptionPane.showMessageDialog(null, d1);
        break;
case 9: removeFaculty();
        break;
}