java - 为什么这不起作用?

标签 java

import java.util.*;

class HashingDemo {
    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);

        System.out.print("Please input the size of the hash table: ");
        int tableSize = keyboard.nextInt();

        LinkedListN[] hashTable = new LinkedListN[tableSize];

        // this works
        LinkedListN list = new LinkedListN();
        list.addToEnd(50);
        System.out.println(list);
        //

        System.out.print("Enter the number of keys to be hashed: ");
        int numberOfKeys = keyboard.nextInt();

        Random randomGenerator = new Random();

        for (int i = 0; i < numberOfKeys; i++) {
            int randomNumber = randomGenerator.nextInt(10000) + 1;

            int location = randomNumber % tableSize;

            hashTable[location].addToEnd(randomNumber);
        }
    }
}

LinkedListN 是一个自定义类(代码附在下面),因为数组不能很好地处理泛型。

但是每次运行该程序时都会出现以下错误:

Please input the size of the hash table: 10
LinkedListN@5265a77f
Enter the number of keys to be hashed: 20
Exception in thread "main" java.lang.NullPointerException
    at HashingDemo.main(HashingDemo.java:30)

尽管正如我上面评论的那样,如果我只有一个 LinkedListN 并向其中添加数据,就没有问题。这是怎么回事?我一直在尝试解决这个问题,但我做不到。

最佳答案

LinkedListN[] hashTable = new LinkedListN[tableSize]; 仅分配数组,而不分配其中的对象。要克服 NullPointerException ,您必须为每个元素分配对象:

for (int i = 0; i < numberOfKeys; i++) {
    int randomNumber = randomGenerator.nextInt(10000) + 1;
    int location = randomNumber % tableSize;
    if(hashTable[location]==null) {
        hashTable[location] = new LinkedListN();
    }
    hashTable[location].addToEnd(randomNumber);
}

您错过了行hashTable[location] = new LinkedListN();

关于java - 为什么这不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13485873/

相关文章:

java - 指定要模拟的通用接口(interface)的类

java - Java 用户名/电子邮件地址的自定义正则表达式

java - JPanel 有时只显示组件

java - 是否有 Util 将美国州名转换为州代码。例如。亚利桑那州到亚利桑那州?

java - Bytebuddy 代理应用建议时出现 "duplicate class"错误

java - Spring Boot 和 JPA+Postgres : Lob mapped to Text but integer is persisted

java - 如何在 Spring Boot 中为 if else 条件编写 JUnit 测试用例

java - Apache HttpComponents。获取 CONNECT 请求的响应

java - Java 平台模块系统是否减小了 JAR 的大小?

java - Eclipse 中的平台特定代码