2011-04-08 43 views
1

現在我正在創建一個堆棧類。主要程序是:創建一個將數字推到數組長度的構造函數

class Program 
{ 
    static void Main(string[] args) 
    { 
     Queue myQue = new Queue(5); 
     Stack myStack = new Stack(5); 

     myStack.Push(1); 
     myStack.Push(2); 
     myStack.Push(3); 
     myStack.Push(4); 
     myStack.Push(5); 
     myStack.Push(6); 

     while (!myStack.IsEmpty) 
     { 
      Console.WriteLine(myStack.Pop()); 
     } 

     Console.WriteLine(myStack.Pop()); 

     Console.WriteLine("End of Stack"); 
    } 
} 

然後堆棧類如下:

class Stack 
{ 

    private int top; 

    private int[] anArray; 

    public bool IsFull 
    { 
     get 
     {   
      return top == anArray.Length - 1; 
     } 
    } 

    public bool IsEmpty 
    { 
     get 
     { 
      return top == -1; 
     } 
    } 

    public void Push(int valueToPush) 
    { 

     if (IsFull) 
     { 
      //do nothing 
     } 
     else 
     { 
      anArray[top] = valueToPush; 
      top = top + 1; 
     } 
    } 
    public int Pop() 
    { 
     if (IsEmpty) 
     { 
      //do nothing 
      return 
     } 
     else 
     { 
      int pop = anArray[top]; 
      top = top -1; 
      return pop; 
     } 
    } 
} 

我遇到的問題是,我需要返回什麼,如果它是空的,但它不會讓我由於int類型而返回NULL。

然後我想我要麼跳過/不明白「構造函數」是什麼。我明白,當我實例化「Stack myStack = new Stack(5);」它發送的是堆棧類「5」,但是如何將堆棧類中的5個數據發送到數組中?

+0

提供的Stack類沒有一個帶整數的構造函數。你確定那是你用的嗎? System.Collections.Stack具有一個整數,並且它設置了堆棧的初始大小,它不會向其中推入任何內容。 – asawyer 2011-04-08 21:08:40

+1

這聽起來很像一個班級作業? – 2011-04-08 21:11:28

+0

我創建一個堆棧類,不使用由C#本身定義的。我想我需要在Stack類中創建一個構造函數來獲取5,然後將其設置爲數組長度。 – Nogg 2011-04-08 21:11:33

回答

0

您沒有構造函數。

添加這樣的事情您的Stack類:

public Stack(int num) 
{ 
    Push(num); 
} 

剛剛看了你的評論,你想使用的號碼創建數組的大小,從而以這種方式,你可以這樣做:

int arrayLength; 
public Stack(int num) 
{ 
    arrayLength = num; 
    //doSomething() -> call a method or just create the array 
} 
0

您必須返回null的一個選項是將返回類型更改爲int?但那麼你將使用nullable type而不是直接使用int。

public int? Pop() 
    { 
     if (IsEmpty) 
     { 
      //do nothing 
      return null; 
     } 
... 

就構造函數來說,這是你將如何設置你的類。 5是否應該確定堆棧的大小,還是應該將其添加到堆棧中?

例如,如果構造函數被設計爲設置堆棧的大小,您將執行以下操作。

class Stack 
{ 

    private int top; 

    private int[] anArray; 

    //This is your constructor. It will guarantee that your anArray will be initialized 
    public Stack(int size) 
    { 
     anArray = new int[size]; 
    } 

    ... 
+0

我想你的意思是anArray = new int [size]; – Pete 2011-04-08 21:14:50

+0

我在編輯,然後我看到你的評論:) – Joe 2011-04-08 21:15:20

+0

那麼,5是什麼arraylength需要。推(1)是數組中的第一個數字。 – Nogg 2011-04-08 21:29:01

0

在當你創建一個堆棧大多數情況下(新堆(5)),你傳遞值5,它是用來用來確定堆棧的大小(見http://www.csharpfriends.com/Articles/getArticle.aspx?articleID=65)。

在您當前的堆棧實現中,您不指定構造函數。您需要創建的線沿線的東西:

public Stack(int x) { 
    // initialize your array (anArray) that represents a stack to size 5 
} 
0

1)試圖Pop從空棧中的項目可以被視爲無效操作,所以只要你允許檢查用戶是否堆棧是空的(你看到了這個),它在那裏是完全正確的throw new InvalidOperationException("The stack is empty.")

2)構造函數問題 - 你的代碼中沒有構造函數。構造函數看起來像一個方法,但它沒有返回值,並且與您的類具有相同的名稱。它由new運算符調用,並且可以採用每種方法的參數。所以你可以採取那樣的5

public Stack(int depth) 
{ 
    // do something with depth 
} 
相關問題