这是作业。
我用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;
}
}
}
我不是在找人为我编写代码,只是指出我正确的方向。谢谢。
答案 0 :(得分:5)
这里有local variable:
public Stack()
{
int[] items;
}
它只退出Stack()
构造函数中的 ,并且仅在其执行的生命周期内退出。
您需要将items
声明为field(成员变量):
class Stack
{
private int index = 0;
private int[] items; // <-- move it here, and mark it private
public Stack()
{
}
// ...
}
但是你有更大的问题。这只是您尚未创建的数组的引用。
因此,您需要实例化一个数组:
int[] items = new int[SIZE];
......但你会用多大的尺码?创建阵列后,它无法增长。一旦空间不足,您将不得不分配更大的阵列并将其复制。这种自动扩展是ADT在幕后工作的次数。
说到空间不足,你最好注意Push()
和Pop()
中阵列的界限!
编辑:所以你需要指定一个大小。只需在构造函数中添加一个参数。
class Stack
{
private int index = 0;
private int[] items;
public Stack(int initialSize)
{
items = new int[initialSize];
}
public Stack() : Stack(100)
{
}
}
答案 1 :(得分:1)
将int[] items;
放在构造函数之外,并将size
参数添加到构造函数中以指定items
的大小:
class Stack
{
int index = 0;
int[] items = new int[0];
public Stack(int size)
{
items = new int[size]; // initiate items with size
}
public void Push(int p)
{
items[index] = p;
index++;
}
public int Pop()
{
index--;
return items[index];
}
internal int IndexState()
{
return index;
}
}