java - 作业: "Exception in thread "main"java. lang.NullPointerException”

标签 java

好的,我有作业。我以为我已经拥有了一切美好的东西,而且我得到了一个

"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/

相关文章:

java - Guava 事件总线 : where to put it in GUI application?

java - objectify 中 ids 和 n 到 m 关系的模式迁移

java - jMenuItem Action 监听器

java - 显示基于 if/else 语句的对话框

java - 按给定条件对列表进行排序

java - jsp中的流数据显示

java - 如何从 Android Java 中的 byteArray 获取前 16 位?

java - 我应该在哪里运行自定义 SQL 以在 Spring Boot 中的数据库中创建枚举类型?

java - 已部署但上下文无法从 tomcat 8 启动

java - 了解java中的线程