【问题标题】:Hashtable NullPointerException哈希表 NullPointerException
【发布时间】:2012-11-05 18:19:59
【问题描述】:

我的任务是设计一个简单的垃圾邮件过滤器,使用哈希表来存储一组“坏词”。我们在课堂上讨论了哈希表是什么以及它是如何使用的(即如何插入元素、线性探测、二次探测、链式探测等),但我们从未真正讨论过如何使用 Java API Hashtable,这是必需的对于这个任务。无论如何,我已经尽力实现它,但是,我遇到了一个我似乎无法用我的调试器跟踪的异常。

我已经放弃在这里插入代码了,我总是要花时间正确格式化它,但它仍然看起来不太好。所以我把它放在 Pastebin 上。它也应该让您的生活更轻松,因为它还可以进行语法突出显示和行计数。

SpamFilter class
SpamFilterDriver class

我在 SpamFilterDriver 类的以下几行中得到 NullPointerExceptions:
第 78 行
第 96 行
第 115 行

任何帮助将不胜感激。我敢肯定这可能很愚蠢,但我现在还没有看到它。



另外,请注意,代码至少还没有完成。 SpamFilter 实现 Serializeable 的事实将在稍后使用。另外,还有一些空方法,再说一遍,后面会实现,我只要先解决这个问题就行了。

【问题讨论】:

  • 您没有在此处发布重要代码。在这种情况下,我们怎么可能提供帮助?投票结束。

标签: java nullpointerexception hashtable


【解决方案1】:

您必须在 SpamFilter 类中初始化您的 SpamFilter filter;。在调用它的任何方法之前。

在第 78 行,您正在调用方法 isBadWord()

在调用它的任何方法之前尝试像下面这样初始化filter。如果你不初始化你的过滤器,默认值是 null 并且当你调用一个带有 null BOOM BOOM NPE 的方法时会出现繁荣

    private static SpamFilter filter = new SpamFilter();// 

【讨论】:

    【解决方案2】:

    看起来您从未初始化 filter 属性,因此无论何时尝试使用它都会收到 NullPointerException。

    尝试将第 6 行替换为:

    private static SpamFilter filter = new SpamFilter();
    

    【讨论】:

      【解决方案3】:

      您的filter 未初始化,因此无论在何处使用都会失败。它仅在顶部声明为private static SpamFilter filter;,这使得过滤器为空。

      要解决此问题,请在声明时将 filter 初始化为

            private static SpamFilter filter = new SpamFilter(); 
      

      或者在main()方法之前while循环为

            filter = new SpamFilter();
      

      【讨论】:

        【解决方案4】:

        在每一行中,请注意您正在调用filter 的方法。 Java 正在抛出 NullPointerException,因为 filter 的值是 null

        为什么它的值是null?因为你从来没有给它赋值;你只是宣布它。您可以在声明时正确设置其值,或者由于它是静态字段,因此您可以使用静态构造函数为其赋值。

        【讨论】:

          猜你喜欢
          • 2023-03-31
          • 2023-03-27
          • 2012-09-16
          • 2012-01-14
          • 2013-03-21
          • 2021-02-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多