我需要使用我必须自己创建的动态数组来实现堆栈数组。
这是我的动态数组:
import java.util.Arrays;
public class Array {
public int[] dynArray;
int counter = 0;
public void create(int n) {
dynArray = new int[n];
}
public void doubleSize() {
int currentSize = dynArray.length;
int newSize = currentSize*2;
dynArray = Arrays.copyOf(dynArray, newSize);
}
private void halfSize() {
int currentSize = dynArray.length;
int newSize = currentSize/2;
dynArray = Arrays.copyOf(dynArray, newSize);
}
public void add(int x) {
dynArray[counter] = x;
counter++;
float ratio = (float) counter / (float) dynArray.length;
if (ratio == 1) {
doubleSize();
}
}
public int rem() {
int last = dynArray[counter-1];
dynArray[counter-1] = 0;
counter--;
float ratio = (float) counter / (float) dynArray.length;
if (ratio <= 0.25) {
halfSize();
}
return last;
}
public int get(int i) {
if(!(check(i))) {
//System.out.print("Cannot be added");
return i;
}
else return dynArray[i];
}
public void put(int x, int y) {
float ratio = (float) counter / (float) dynArray.length;
if (ratio ==1) {
doubleSize();
}
if(!check(y)) {
System.out.println("No such index, nothing added to "+y);
} else {
dynArray[y] = x;
}
}
public int len() {
return dynArray.length;
}
public boolean check(int index) {
if(index <0 || index >=dynArray.length) {
return false;
} else {
return true;
}
}
public static void main(String[] args) {
Array dm = new Array();
dm.create(5);
System.out.println("Current array length "+dm.len());
dm.add(5);
dm.add(4);
dm.add(3);
dm.add(1);
dm.add(2);
System.out.println("Current array length "+dm.len());
dm.rem();
dm.rem();
System.out.println("Current array length "+dm.len());
dm.rem();
System.out.println("Current array length "+dm.len());
dm.rem();
System.out.println("Current array length "+dm.len());
}
}
这是我的堆栈代码:
public class Stack {
private static Array a;
public void create() {
a = new Array();
}
void push(int x) {
a.add(x);
}
int pop() {
return a.rem();
}
boolean isEmpty() {
return a.len() == 0;
}
public static void main(String[] args) {
Stack stack = new Stack();
stack.create();
stack.push(1);
/*int k = 1;
stack.push(2*k);
stack.push(2*k+1);
stack.push(2*k+2);
for (int i = 0; i<40; i++) {
System.out.println(stack.pop());
}*/
}
}
当我在 Stack.java
main 中编写 stack.push(1)
时,它会在它显示的行上给出一个 NullPointerException
a.add(x)
。我不明白为什么会出现这个异常。
最佳答案
Stack
中的 create 方法创建一个新的 Array
实例,但不会调用 Array
的 create 方法。因此,dynArray
保持为 null,并且在访问它时会收到 NullPointerException
(在 dynArray[counter] = x;
中)。
您可能应该在 Array
的构造函数中调用 create
(或者消除 create
方法并将其代码移至构造函数)。
关于java - Java中的栈和动态数组实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26733850/