我一直在努力解决这个NullPointerException问题:
Exception in thread "main" java.lang.NullPointerException
at LinearSearcher.<init>(LinearSearcher.java:12)
at DemoSearches.main(DemoSearches.java:4)
通过研究,我发现当您声明引用类型但不创建对象时会发生此异常。在我的情况下,我正在尝试声明LinearSearcher
我试图用我的代码理解这一点,但我遇到了困难
LinearSearcher的代码:
public class LinearSearcher implements Searcher {
private int[] numbers;
public LinearSearcher() {
numbers[0] = 1; // Line 12 Here
numbers[1] = 10;
numbers[2] = 20;
numbers[3] = 30;
numbers[4] = 40;
numbers[5] = 50;
numbers[6] = 60;
numbers[7] = 70;
numbers[8] = 80;
numbers[9] = 90;
}
public int searchFor(int key) {
for (int i = 0; i < numbers.length; i++){
if (numbers[i] == key) {
return i;
}
}
return NOT_FOUND;
}
public void display() {
for (int i = 0; i < numbers.length; i++){
}
}
}
声明LinearSearcher的类:
public class DemoSearches {
public static void main(String args[]) {
LinearSearcher search = new LinearSearcher(); // Line 4 Here
search.display();
search.searchFor(50);
search.searchFor(100);
}
}
答案 0 :(得分:4)
numbers
是null
,因为您尚未对其进行初始化。你可以改变
private int[] numbers;
到
private int[] numbers = { 1, 10, 20, 30, 40, 50, 60, 70, 80, 90 };
并消除问题。其他解决方案,添加
numbers = new int[10];
在您当前的作业之前。
答案 1 :(得分:2)
您永远不会初始化numbers
数组,因此当您尝试在LinearSearcher
构造函数中访问它时,您尝试访问不存在的数组。所以抛出异常。
答案 2 :(得分:0)
在执行numbers = new int[10];
等之前,您需要执行numbers[0]
。这将创建对象,以便可以使用它。