簡體   English   中英

Java堆棧類

[英]Java stack class

好的,所以我編寫了自己的堆棧類,而不使用內置的類。 堆棧類包含一個Entry對象列表和堆棧大小(兩個實例字段)。 在堆棧類中,我有一個push方法,它將Entry對象添加到堆棧中。 添加后,堆棧大小應增加一。

我已經測試過了,效果很好,並且可以正常工作。 我可能還應該解釋我的Entry類包含的內容。 Entry類基本上具有一個構造函數,該構造函數接受一個數字並將其保存。

因此對於Stack類,我的push方法如下所示:

public class Stack{

private List<Entry> entries = new ArrayList<Entry>();
private int size;

public void push(Entry entry)
{
  if(entry == null)
  String message = "The Parameter given was illegal(null)";
  throw new IllegalArgumentException(message);
}
entries.add(entry) // adds the entry object to the stack (or entries List)
size ++ // increments the size by 1. 
}

再次,這工作得非常好,無法將Entry對象添加到我的Stack中,並且大小會按需增加。 現在,我們需要創建一個名為NumberStack的新類,該類基本上隱藏了細節並從該類中調用堆棧類中的push方法。 我將向您展示NumberStack類的樣子:

public class NumberStack {


private Stack numStack = new Stack();


public void push(final float i) {


numStack.push(new Entry(i));
} 

因此,基本上,它與Stack類中的push方法相同,但是隱藏了細節。 現在這行不通! 當我調用此方法時,什么都沒有添加到堆棧(條目列表)中。 如果我嘗試通過我的NumberStack push方法推送兩個數字。 它應該在Stack類中調用push方法並添加Entry對象。 但是什么也沒有發生。 再說一次,如果我直接在我的Stack類中直接推送,它就可以正常工作。

為什么NumberStack類中的push方法不起作用? 它沒有任何作用,什么也沒有添加到堆棧中。

編輯:

我嘗試測試它:

public static void main(String[] args){

System.out.println("Debugging...");
NumStack numStack = new NumStack();
Stack stack = new Stack();
System.out.println("Size before pushing from NumStack = " + stack.size());
numStack.push(5);
System.out.println("Size after pushing from NumStack method push =  " + stack.size());
stack.push(new Entry(5));
System.out.println("Size after pushing directly from Stack  = " + stack.size());
}

以上返回:

從NumStack推送之前的大小= 0

從NumStack方法推入后推入的大小= 0

直接從堆棧推入后的大小= 1

任何幫助,不勝感激謝謝。

首先,最重要的是:

public void push(Entry entry)
{
  if(entry == null)
  String message = "The Parameter given was illegal(null)";
  throw new IllegalArgumentException(message);
}
entries.add(entry) // adds the entry object to the stack (or entries List)
size ++ // increments the size by 1. 
}

將永遠無法工作。 你要

public void push(Entry entry)
{
  if(entry == null)  
  **{**  
  String message = "The Parameter given was illegal(null)";
  throw new IllegalArgumentException(message);
  **}**
entries.add(entry) // adds the entry object to the stack (or entries List)
size ++ // increments the size by 1. 
}

同樣,打印語句不正確:

System.out.println("Size after pushing from NumStack method push =  " + stack.size());

應該:

System.out.println("Size after pushing from NumStack method push =  " + **numStack.size()**);

這是失敗的,因為您引用的是錯誤的實例。

在NumberStack類中,您創建一個名為numStack的Stack對象numStack.push(5); 被調用時,它將轉到NumberStack類的push方法並被推入名為numStack的堆棧對象中。因此實例變量的大小在該對象中增加。 但是在測試中,您正在創建另一個稱為Stack的Stack類實例。 但是實例變量的大小在該對象中仍為0。

但是在main方法中,您從堆棧實例中打印了大小,這就是為什么您得到答案0的原因。

暫無
暫無

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

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