创建将数字压入数组长度的构造函数
本文关键字:构造函数 数组 数字 创建 | 更新日期: 2023-09-27 17:49:24
现在我正在创建一个堆栈类。主程序为:
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;
}
}
}
我遇到的问题是,如果它是空的,我不需要返回任何东西,但它不会让我返回NULL,因为类型为int。
那么我想我要么跳过了,要么不明白什么是"构造函数"。我明白,当我实例化"Stack myStack = new Stack(5);"它正在发送堆栈类"5"但我如何将堆栈类中的5放入数组中?
没有构造函数
在您的堆栈类中添加如下内容:
public Stack(int num)
{
Push(num);
}
请阅读您的注释,您希望使用数字来创建数组的大小,因此您可以这样做:
int arrayLength;
public Stack(int num)
{
arrayLength = num;
//doSomething() -> call a method or just create the array
}
您必须返回null
的一个选项是将返回类型更改为int?但是,这样您将使用可空类型,而不是直接使用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];
}
...
在大多数情况下,当你创建一个堆栈(new stack(5))时,你传递的是值5,它被用来确定堆栈的大小(参见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
}
1)尝试从空堆栈中Pop
一个项目可以被视为无效操作,所以如果只有你允许用户检查堆栈是否为空(你这样做我看到),它是完全正确的throw new InvalidOperationException("The stack is empty.")
在那里。
2)构造函数问题——代码中没有构造函数。构造函数看起来像一个方法,但它没有返回值,并且具有与类相同的名称。它由new
操作符调用,并且可以像每个方法一样接受参数。所以你可以把5
改成这样:
public Stack(int depth)
{
// do something with depth
}