我有一个学校作业,需要在Java中创建ArrayList的非常基本的克隆。它只需要使用字符串,并且功能最少(大小,添加,获取)。到目前为止,这就是我所拥有的。我意识到可能有很多可以改进的地方,但是现在我正在尝试解决此错误
Exception in thread "main" java.lang.NullPointerException
at pt2.ArrayListMine.expand(ArrayListMine.java:13)
at pt2.ArrayListMine.add(ArrayListMine.java:32)
at pt2.Driver.main(Driver.java:21
我认为问题在于,当我调用expand()而不是将字符串从数组移动到备份,然后再备份到数组时,它传递了指针,因此,在我调用它之后,我有效地使数组指向了备份并指向数组。我不确定是否/如何强制它传递字符串而不是指针,因此我希望可以得到一些建议。谢谢!
package pt2;
public class ArrayListMine {
private String[] array;
private String[] backup;
private int array_size = 0;
public void ArrayListMine() {
array = new String[10];
}
private void expand() {
if(array_size == array.length) {
for(int l = 0; l < array.length; l++) {
backup[l] = array[l];
}
int new_size = (int) (array.length * 2);
array = new String[new_size];
for(int l = 0; l < backup.length; l++) {
array[l] = backup[l];
}
}
}
public int size() {
return array_size;
}
public void add(String value) {
array_size = array_size + 1;
System.out.println(array_size);
expand();
array[array_size - 1] = value;
}
public String get(int index) {
return array[index];
}
}
答案 0 :(得分:0)
videos
为空。因为这个
/hdd/videos
不是构造函数。 删除 array
。喜欢,
public void ArrayListMine() {
array = new String[10];
}
接下来,使用void
将public ArrayListMine() {
array = new String[10];
}
复制到backup = Arrays.copyOf(array, array.length)
。因为这个
array
也会爆炸。
答案 1 :(得分:0)
在复制之前使用阵列大小初始化备份。
backup = new String[array.length];
在expand
边的方法中,然后再复制到该方法。
public class ArrayListMine {
private String[] array;
private String[] backup;
private int array_size = 0;
public ArrayListMine() {
array = new String[10];
}
private void expand() {
if(array_size == array.length) {
backup = new String[array.length];
for(int l = 0; l < array.length; l++) {
backup[l] = array[l];
}
int new_size = (int) (array.length * 2);
array = new String[new_size];
for(int l = 0; l < backup.length; l++) {
array[l] = backup[l];
}
}
}
public int size() {
return array_size;
}
public void add(String value) {
array_size = array_size + 1;
System.out.println(array_size);
expand();
array[array_size - 1] = value;
}
public String get(int index) {
return array[index];
}
public static void main(String[] args) {
ArrayListMine arrayListMine = new ArrayListMine();
for(int i=0;i<=20;i++) {
arrayListMine.add("test "+i);
}
}
}
进一步,您可以将for
循环替换为System.arrayCopy
private void expand() {
if(array_size == array.length) {
backup = new String[array.length];
System.arraycopy(array, 0, backup, 0, array_size);
/*for(int l = 0; l < array.length; l++) {
backup[l] = array[l];
}*/
int new_size = (int) (array.length * 2);
array = new String[new_size];
/*for(int l = 0; l < backup.length; l++) {
array[l] = backup[l];
}*/
System.arraycopy(backup, 0, array, 0, array_size);
}
}