[英]Stack and dynamic array implementation in Java
我需要使用必須創建自己的動態數組來實現堆棧數組。
這是我的動態數組:
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)
時,它在顯示a.add(x)
的行上給了我NullPointerException
。 我不明白為什么會發生這種異常。
您在Stack
create方法會創建一個新的Array
實例,但不會調用Array
的create方法。 因此, dynArray
保持為空,並且在訪問NullPointerException
時會得到它(在dynArray[counter] = x;
)。
您可能應該在Array
的構造函數中調用create
(或取消create
方法並將其代碼移至構造函數)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.