use*_*843 2 c# arrays tdd stack constructor
这是作业.
我用Google搜索并在stackoverflow中搜索,但我似乎无法找到答案.也许我的术语不正确.
我正在学习TDD课程,而且我的C#技能很生疏,也很有限.
我正在尝试编写一个堆栈类.当我尝试在构造函数中启动数组时,方法无法访问它.
我确信这是我想念的简单事.这是我到目前为止所尝试的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace tdd_programmingTest
{
class Stack
{
int index = 0;
public Stack()
{
int[] items;
}
public void Push(int p)
{
items[index] = p;
index++;
}
public int Pop()
{
index--;
return items[index];
}
internal int IndexState()
{
return index;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我不是在找人为我编写代码,只是指出我正确的方向.谢谢.
你在这里有一个局部变量:
public Stack()
{
int[] items;
}
Run Code Online (Sandbox Code Playgroud)
它仅在Stack()构造函数内部退出,并且仅在其执行的生命周期内退出.
您需要声明items为字段(成员变量):
class Stack
{
private int index = 0;
private int[] items; // <-- move it here, and mark it private
public Stack()
{
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
但是你有更大的问题.这只是对尚未创建的数组的引用.
所以,你需要实例化一个数组:
int[] items = new int[SIZE];
Run Code Online (Sandbox Code Playgroud)
......但你会用多大的尺码?创建阵列后,它无法增长.一旦空间不足,您将不得不分配更大的阵列并将其复制.这种自动扩展是ADT在幕后工作的次数.
说到空间用完的,你最好留意你的数组的边界Push()和Pop()!
编辑:所以你需要指定一个大小.只需在构造函数中添加一个参数即可.
class Stack
{
private int index = 0;
private int[] items;
public Stack(int initialSize)
{
items = new int[initialSize];
}
public Stack() : Stack(100)
{
}
}
Run Code Online (Sandbox Code Playgroud)