访问构造函数中的数组

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)

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

Jon*_*art 5

你在这里有一个局部变量:

    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)