当我向这个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--;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的测试课.
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");
}
}
Run Code Online (Sandbox Code Playgroud)
这是测试类的输出.
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)
Run Code Online (Sandbox Code Playgroud)
令人困惑的是,这不是一个构造函数:
public void DynamicArray(){
data = new Object[1];
size = 0;
}
Run Code Online (Sandbox Code Playgroud)
这是一个叫做的功能DynamicArray(非常混乱,我知道).
如果没有具有构造函数的类,当您尝试访问数组时,data保留null并导致NPE.
删除void关键字以将函数转换为构造函数(然后将初始化data等):
public DynamicArray(){
data = new Object[1];
size = 0;
}
Run Code Online (Sandbox Code Playgroud)
构造函数没有返回值,从构造函数中删除返回类型(void)
public DynamicArray(){
data = new Object[1];
size = 0;
}
Run Code Online (Sandbox Code Playgroud)
在你的情况下,当你从DynamicArray类初始化对象时,默认构造函数将执行,什么都不做
| 归档时间: |
|
| 查看次数: |
106 次 |
| 最近记录: |