簡體   English   中英

Java中的堆棧和動態數組實現

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM