访问构造函数中的数组

时间:2014-01-31 03:50:22

标签: c# arrays constructor stack tdd

这是作业。

我用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;
        }
    }
}

我不是在找人为我编写代码,只是指出我正确的方向。谢谢。

2 个答案:

答案 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;
    }
}