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();