【发布时间】:2011-08-01 19:51:09
【问题描述】:
现在我正在创建一个堆栈类。主程序是:
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 放入数组中?
【问题讨论】:
-
提供的 Stack 类没有采用整数的构造函数。你确定那是你用的吗? System.Collections.Stack 有一个带有单个整数的,它设置堆栈的初始大小,它不会向其中压入任何东西。
-
这听起来很像课堂作业?
-
我正在创建一个堆栈类,而不是使用 C# 本身定义的堆栈类。我想我需要在 Stack 类中创建一个构造函数来获取 5,然后将其设为数组长度。
-
为什么不在 Stack 中包含一个构造函数,例如 Stack(int i) ?此外,如果您需要在 Pop 上返回 null,您可以使用 nullable int。我个人会抛出异常
-
异常时+1,弹出空堆栈是一个逻辑错误,不应该是优雅的(通常不在大多数类库中)。但是,如果这是您的要求(无论是上课还是工作),那么可以为 null 的 int (System.Nullable
==or== int?) 就可以了。
标签: c# arrays constructor stack