-1

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

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

SpamFilter 类
SpamFilterDriver 类

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

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



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

4

4 回答 4

1

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

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

filter在调用其任何方法之前尝试如下初始化。如果您不初始化过滤器,则默认值为 null 并且当您调用具有 null 的方法时会出现繁荣BOOM BOOM NPE被抛出

    private static SpamFilter filter = new SpamFilter();// 
于 2012-11-17T00:51:15.873 回答
1

在每一行中,观察您正在调用filter. Java 正在抛出得到 aNullPointerException因为filter的值是null.

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

于 2012-11-17T00:51:30.787 回答
1

filter没有被初始化,因此无论在哪里使用都会失败。它仅在顶部声明为private static SpamFilter filter;,这使得过滤器为空。

要解决此问题,请将filterat 声明初始化为

      private static SpamFilter filter = new SpamFilter(); 

或在循环main()之前的方法中while

      filter = new SpamFilter();
于 2012-11-17T00:51:37.160 回答
1

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

尝试将第 6 行替换为:

private static SpamFilter filter = new SpamFilter();
于 2012-11-17T00:52:47.337 回答