【问题标题】:why am i getting a NullPointerException Java [duplicate]为什么我会收到 NullPointerException Java [重复]
【发布时间】:2020-10-26 01:57:51
【问题描述】:

所以我正在编写一个 Java 编程,我有 2 个类和一个使用这 2 个类的类测试。运行 eclipseIDE,它一直告诉我我在 "s+=c.getName() + " " +... " 有一个 NullPointerException

这是 Student 中的一个方法。

public String getCourses()
    {
        String s = "";
        for(Course c: this.courses)
        {
            s+=c.getName() + " " + c.getID() + " " + c.getScore(this.id);
            s+="\n";
        }
        return s;
    }

它调用 Course 类中的这个方法。

public String getID()
{
    return this.id;
}

我尝试只做 getName();它没有问题,但是一旦我添加了 getID() 它就成了一个问题。 getName 是同一类型的代码,它以字符串的形式返回对象的“名称”。

name 和 id 通过构造函数“初始化”

Stacktrace:
Exception in thread "main" java.lang.NullPointerException
    at hw6.Student.getCourses(Student.java:47)
    at hw6.CourseStudent_test.main(CourseStudent_test.java:100)

这是 getScore 方法

public double getScore(String id)
    {
        int i = 0;
        for(; i < this.students.length;i++)
        {
            if(this.students[i].getID() == id )
            {
                break;
            }
        }
        return this.scores[i];
    }

【问题讨论】:

  • 请发布您的堆栈跟踪
  • 添加了@ScaryWombat
  • 请附上您的整个课程内容
  • @Derek.W 有没有办法以某种方式发布它们?两个类都有超过 100 行
  • c.getScore(this.id); 看起来很狡猾。请发布此代码。同时确认this.id的值

标签: java


【解决方案1】:

如果异常发生在您的堆栈跟踪 + 问题所说的位置,则 courses 中的元素之一必须是 null

推理:

  • 如果异常是在 Course 方法调用之一中引发的,则堆栈跟踪会将该方法显示为顶部堆栈帧。

  • 如果这 3 个调用之一返回 null,您将不会获得 NPE。您只会在结果连接中得到“null”;见String concatenation with Null

【讨论】:

  • 是的,所有的get...()都返回一个String值,
  • 这证实了我的诊断。检查courses 中的内容,以及null 是如何进入其中的。这就是问题所在。
  • 前两点足以得出结论。
  • 通过查看初始化和分配到数组的代码!我假设您知道数组的元素将默认初始化为null
  • 我现在必须离开这里。祝你好运。解决这个问题的诀窍是逻辑思考......
【解决方案2】:

发现了问题,由于“For each”循环,当它到达一个 Null 对象时,它会尝试运行 getter 方法,但是每次它都返回 null,因为其中的每个变量都没有“值”该对象,所以我只是添加了一个 if 条件来检查该对象是否为“null”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-22
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    相关资源
    最近更新 更多