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