Как передать размер массива во время выполнения? - PullRequest
0 голосов
/ 01 апреля 2020

Я думал, что следующий фрагмент кода может быть запущен.

public class Stack {
    int n;
    char arr[]=new char[n];
    int top=0;

    void Push(char val) {
        arr[top]=val;
        top++;   
    }
}

class Solution {
    public static void main(String[] args) {
        Stack obj=new Stack();
        obj.n=5;
        obj.Push('a');
        obj.Push('a');
        obj.Push('a');
        obj.Push('a');
    }
}

Однако это дает ArrayOutOfBoundsException. Почему размер массива не меняется на 5?

1 Ответ

0 голосов
/ 01 апреля 2020

Используйте конструктор для вашего стека. По умолчанию значение n установлено на ноль. Итак, ваш массив создается с размером 0. Параметризованный конструктор, как показано ниже, должен сделать всю работу за вас.

      public class Stack {
        int n;
        char arr[];
        int top=0;

        public Stack(int n) {
            this.n = n;
            this.arr = new char[n];
        }

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...