Создание конструктора, который увеличивает число до длины массива. - PullRequest
1 голос
/ 09 апреля 2011

Прямо сейчас я создаю класс стека. Основная программа:

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 в классе стека в массив?

Ответы [ 4 ]

0 голосов
/ 09 апреля 2011

1) Попытка Pop элемента из пустого стека может рассматриваться как недопустимая операция, поэтому, если только вы позволите пользователю проверить, пуст ли стек (и вы делаете это, я вижу), это совершенно правильнона throw new InvalidOperationException("The stack is empty.") там.

2) Проблема с конструктором - в вашем коде нет конструктора.Конструктор выглядит как метод, но он не имеет возвращаемого значения и имеет то же имя, что и ваш класс.Он вызывается оператором new и может принимать аргументы, как и любой метод.Таким образом, вы можете взять это 5 так:

public Stack(int depth)
{
    // do something with depth
}
0 голосов
/ 09 апреля 2011

Один вариант, который вы должны вернуть 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];
    }

    ...
0 голосов
/ 09 апреля 2011

В большинстве случаев, когда вы создаете стек (новый стек (5)), вы передаете значение 5, которое используется для определения размера стека (см. http://www.csharpfriends.com/Articles/getArticle.aspx?articleID=65).

Вваша текущая реализация стека, вы не указываете конструктор. Вам нужно создать что-то вроде:

public Stack(int x) {
   // initialize your array (anArray) that represents a stack to size 5
}
0 голосов
/ 09 апреля 2011

У вас нет конструктора.

Добавьте что-то подобное в свой класс стека:

public Stack(int num)
{
    Push(num);
}

Просто прочитайте ваш комментарий, что вы хотите, чтобы число использовалось для создания размера массива, чтобы вы могли сделать следующее:

int arrayLength;
public Stack(int num)
{
    arrayLength = num;
    //doSomething() -> call a method or just create the array
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...