当我向这个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)
答案 0 :(得分:6)
令人困惑的是,这不是构造函数:
public void DynamicArray(){
data = new Object[1];
size = 0;
}
这是一个名为DynamicArray
的函数(非常混乱,我知道)。
如果没有具有构造函数的类,data
仍为null
并在您尝试访问数组时导致NPE。
删除void
关键字,将函数转换为构造函数(然后初始化data
等):
public DynamicArray(){
data = new Object[1];
size = 0;
}
答案 1 :(得分:6)
构造函数没有返回值,从构造函数(void)中删除返回类型
public DynamicArray(){
data = new Object[1];
size = 0;
}
在你从DynamicArray
类初始化对象的情况下,默认构造函数将执行,什么都不做