创建将数字推送到数组长度的构造函数

时间:2011-04-08 21:05:42

标签: c# arrays constructor stack

现在我正在创建一个堆栈类。主要计划是:

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");
    }
}

然后Stack Class如下:

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添加到数组中?

4 个答案:

答案 0 :(得分:0)

你没有构造函数。

将类似内容添加到堆栈类:

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

只需阅读您的评论,您希望使用该数字来创建数组的大小,这样就可以这样做:

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

答案 1 :(得分: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];
    }

    ...

答案 2 :(得分:0)

在大多数情况下,当你创建一个堆栈(new Stack(5))时,你传递的值为5,用于确定堆栈的SIZE(参见http://www.csharpfriends.com/Articles/getArticle.aspx?articleID=65)。

在当前的Stack实现中,您没有指定构造函数。您需要创建以下内容:

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

答案 3 :(得分:0)

1)尝试将Pop空堆栈中的项目视为无效操作,因此如果只允许用户检查堆栈是否为空(并且我这样做,我看到),那么完全正确到throw new InvalidOperationException("The stack is empty.")那里。

2)构造函数问题 - 代码中没有构造函数。构造函数看起来像一个方法,但它没有返回值,并且与您的类具有相同的名称。它由new运算符调用,可以像每个方法一样获取参数。所以你可以那样5

public Stack(int depth)
{
    // do something with depth
}