好的,我有作业。我以为我已经拥有了一切美好的东西,而且我得到了一个
"Exception in thread "main" java.lang.NullPointerException at HW3.main<HW3.java:18>
该行是:
tempMembers[i/4].setFirstName(args[i]);
现在我在编程方面仍然是个菜鸟,到目前为止我所做的一切都是在 Eclipse 中完成的。该程序将在文本编辑器中创建,然后在命令提示符下编译并运行。我不知道我是否只是错误地输入了参数。
因此,对于此错误,我的命令提示符条目是
java HW3 Bill Smith 2009 Football Jane Doe 2000 Tennis David Jones 1995 Baseball
那么问题出在我的代码中还是我的输入中?如果错误出在我的代码中,你能指出我正确的方向吗?就像我说的,命令行参数对我来说是全新的,我的类(class)没有做任何这样的例子,只是谈论概念。
public class HW3 {
public static void main(String[] args) throws Exception {
if (args.length % 4 != 0) {
throw new Exception(
"First Name, Last Name, Year Inducted, Sport not entered correctly");
}
HallOfFame hallOfFameList = new HallOfFame();
hallOfFameList.setNumberOfMembers(args.length / 4);
HallOfFameMember[] tempMembers = new HallOfFameMember[args.length / 4];
for (int i = 0; i < args.length; i += 4) {
tempMembers[i/4].setFirstName(args[i]);
tempMembers[i/4].setLastName(args[i+1]);
tempMembers[i/4].setYearInducted(Integer.parseInt(args[i+2]));
tempMembers[i/4].setSport(args[i+3]);
}
hallOfFameList.setMembers(tempMembers);
HallOfFameMember[] sortedMembers = null;
hallOfFameList.sortMembers(sortedMembers);
HallOfFame.printReport(sortedMembers);
}
}
public class HallOfFameMember implements Comparable<HallOfFameMember> {
private String firstName;
private String lastName;
private String sport;
private int yearInducted;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getSport() {
return sport;
}
public void setSport(String sport) {
this.sport = sport;
}
public int getYearInducted() {
return yearInducted;
}
public void setYearInducted(int yearInducted) {
this.yearInducted = yearInducted;
}
@Override
public int compareTo(HallOfFameMember o) {
return this.getYearInducted() - o.getYearInducted();
}
}
public class HallOfFame {
private HallOfFameMember[] members;
private int numberOfMembers;
public HallOfFameMember[] getMembers() {
return members;
}
public void setMembers(HallOfFameMember[] members) {
this.members = members;
}
public int getNumberOfMembers() {
return numberOfMembers;
}
public void setNumberOfMembers(int numberOfMembers) {
this.numberOfMembers = numberOfMembers;
}
public void sortMembers(HallOfFameMember[] sortedMembers) {
boolean bool = true;
HallOfFameMember temp;
while (bool) {
bool = false;
for (int i = 0; i < sortedMembers.length - 1; i++) {
if (sortedMembers[i].compareTo(sortedMembers[i + 1]) > 0) {
temp = sortedMembers[i];
sortedMembers[i] = sortedMembers[i + 1];
sortedMembers[i + 1] = temp;
bool = true;
}
}
}
}
public static void printReport(HallOfFameMember[] print) {
System.out.println("Java Sports Hall of Fame Inductees\n\n");
System.out.printf("%-30s\t%-30s\t%-30s\n", "Name", "Year Inducted",
"Sport");
for (int i = 0; i < print.length; i++)
System.out.printf("%-30s\t%-30s\t%-30s\n", print[i].getLastName()
+ "," + print[i].getFirstName(),
print[i].getYearInducted(), print[i].getSport());
}
}
最佳答案
您在这一行初始化了数组:
HallOfFameMember[] tempMembers = new HallOfFameMember[args.length / 4];
但数组将包含 null
元素。在尝试调用数组中的方法之前,您需要构造数组中的每个元素:
tempMembers[i/4] = new HallOfFameMember();
tempMembers[i/4].setFirstName(args[i]);
关于java - 作业: "Exception in thread "main"java. lang.NullPointerException”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7543248/