簡體   English   中英

java中自定義棧類,繼承自Stack,始終為空

[英]Custom stack class in java, inherited from Stack, always remains empty

我從 Java Stack 類繼承了一個類 Tables。 我已經覆蓋了我的這個類的 push 和 pop 方法。 不知何故,在每次 push 時,沒有任何內容添加到堆棧中,顯示 size() 始終為零。 請給我所有可能出錯的建議。 附上代碼:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;


class Tables extends Stack<Integer>{
boolean full;
int tabCount;
int cleanCount;
Stack<Integer> stack;
public Tables(int n){
    tabCount = n;
    stack = new Stack<Integer>();
    full = false;
    cleanCount = 0;
}
@Override
public synchronized Integer pop() {
    full = false;
    return super.pop();
}
@Override
public Integer push(Integer item) {
    System.out.println(" PushStats : "+stack.size()+" "+tabCount +"  " + stack.isEmpty());
    if(stack.size() == tabCount-1)
    {
        full = true;
    }
    cleanCount ++;
    return super.push(item);
 }
}

public class Main1{

    public static void main(String[] args) throws NumberFormatException, IOException{
    int n,m,t;
    BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));

    t = Integer.parseInt( bReader.readLine());//Test Cases
    for(int test = 0 ; test <t ; test++){
        String holder = bReader.readLine();
        String[] temp = holder.trim().split(" ");
        n = Integer.parseInt(temp[0]);//Tables
        m = Integer.parseInt(temp[1]);//Orders
        holder = bReader.readLine();
        temp = holder.trim().split(" ");
        Integer[] orders = new Integer[m];
        for(int i =0; i<m ; i++){
            orders[i] = Integer.parseInt(temp[i]);
        }
        process(n,m,orders);
    }
 }


private static void process(int n, int m, Integer[] orders) {
   Tables tables = new Tables(n);
   for(Integer order : orders){
        System.out.println("  Order from :"+order+". Stack status :full =  "+tables.full);

        if(tables.search(order) == -1){
            if(tables.full){
                System.out.println("Popped out: "+tables.pop());
            }
            tables.push(order);
        }
      }
      System.out.println("Result : "+ tables.cleanCount);
    }
}

您已經擴展了Stack ,從而繼承了它的所有功能,可以訪問內部字段等。然而,您還在構造函數中創建了一個Stack實例並將其保留為一個字段。 您的某些方法委托給該實例,而其他方法則調用super方法。

移除Stack<Integer> stack; 行並使引用它的每一行都使用繼承的字段、方法或進行超級調用。

您在這里混淆了兩種方法:委托與繼承。 你的類一個Stack ,所以它可能不需要持有另一個堆棧。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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