我一直在尝试创建自己的Array
类,它是动态的,但我无法弄清楚问题所在 调整其大小。我创建了单独的函数来检查数组是否已满并调整其大小。但我认为它不能称之为其中任何一个。
public class Array {
private int[] array;
private int size;
public int pointer;
private static int DEFAULT_SIZE = 5;
Array() {
this(DEFAULT_SIZE);
}
Array(int size) {
this.size = size;
this.array = new int[size];
}
public void add(int element) {
if (isFull()) {
resize();
}
array[pointer] = element;
pointer++;
}
private boolean isFull() {
return pointer == array.length;
}
private void resize() {
int[] temp = new int[size * 2];
for (int i = 0; i < array.length; i++) {
temp[i] = array[i];
}
array = temp;
}
public void print() {
for (int i = 0; i < size; i++) {
System.out.println(array[i]);
}
}
}
分配更大的数组后,您永远不会更新size
:
private void resize() {
int[] temp = new int[size * 2];
for (int i = 0; i < array.length; i++) {
temp[i] = array[i];
}
array = temp;
}
这将使size
处于初始值5
。您必须在方法的末尾添加size *= 2
(或在开始时,然后只执行new int[size]
)。
请注意,size
字段是完全多余的,因为它已经通过array.length
(您已经在循环条件下使用)进行跟踪和访问。
print
似乎是不正确的,因为它总是打印整个数组,甚至是尚未添加的项目。您可能希望用户pointer
而不是size
(否则,您将打印大量零):
public void print() {
for (int i = 0; i < pointer; i++) {
System.out.println(array[i]);
}
}