【发布时间】:2018-01-25 14:52:58
【问题描述】:
每当我向这个 ArrayList 添加一个对象时,我的 resize 方法都会给我一个 NullPointerException。列表的大小初始化为 1,第一个元素被添加到数组中的位置 0。
这是我的 arrayList AKA DynamicArray
//Implementation of a dynamic array
// Add remove methods
public class DynamicArray {
private Object[] data;
private int size;
public void DynamicArray(){
data = new Object[1];
size = 0;
}
public int size(){return size;}
public Object get(int index){return data[index];};
private void resizeIfFull()
{
if (size < data.length){
return;
} else {
Object[] bigger = new Object[2 * data.length];
for (int i = 0; i < data.length; i++){
bigger[i] = data[i];
data = bigger;
}
}
}
public void add(Object obj){
resizeIfFull();
data[size] = obj;
size++;
}
public void add(int index, Object obj){
resizeIfFull();
for(int i = size - 1; i >= index; i--){
data[i+1] = data[i];
}
data[index] = obj;
size++;
}
public void remove(int index){
for(int i = index; i < size; i++){
data[i] = data[i+1];
}
size--;
}
}
这是我的测试课。
public class AlgorTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
DynamicArray dynam = new DynamicArray();
System.out.println(dynam.size());
dynam.add("first");
}
}
这是我在测试课上的输出。
0
Exception in thread "main" java.lang.NullPointerException
at DynamicArray.resizeIfFull(DynamicArray.java:20)
at DynamicArray.add(DynamicArray.java:38)
at AlgorTest.main(AlgorTest.java:8)
【问题讨论】:
-
你在哪一行得到 NPE?
-
data = bigger;应该在循环之后完成。 -
移除构造方法中的 void 类型
-
您可以开始使用 IDE,它会立即突出显示这些烦人的浪费时间的错误(并且还会自动格式化您的代码)。
-
以前的副本可能是一般性的,但仍然解释了问题所在(但在这种特定情况下不一定是原因)。我建议不要重新打开它,而是在重复列表中添加更具体的问题,例如 java “void” and “non void” constructor(现在不能这样做,因为不能对同一个问题进行多次近距离投票)。
标签: java