2014-12-16 1 views
-1

Я пытаюсь реализовать стек с массивом. BlueJ сообщает, что «размер» имеет частный доступ в java.util.ArrayList, хотя список массивов является общедоступным, когда я компилирую.Проверка размера стека (ArrayList) на Java?

int stackLength = stackStorage.size; 
System.out.println(+stackLength); 

И если я изменить линию ..

int stackLength = stackStorage.size(); 

программа компилируется, и я получаю nullPointerExcetion при запуске функции.

Я не понимаю, почему это происходит, потому что значение не может быть назначено вручную, потому что значение должно поступать из размера стека.

Любая помощь приветствуется, приветствия.

+3

Ваш стекStorage равен null. – MTilsted

+0

Поделитесь своим кодом .. – SMA

+0

Привет, просто обновляю вопрос, был ли вопрос решен. – Juxhin

ответ

2

Вы не можете напрямую вызвать переменную (потому что это личное поле). Вместо этого вы должны использовать stackStorage.size(). Также убедитесь, что stackStorage фактически создан.


Вы, скорее всего, есть:

ArrayList<Object> stackStorage; 

Однако вы должны создать его экземпляр куда-нибудь так:

stackStorage = new ArrayList<Object>(); 

Это может быть также сделано на той же строке:

ArrayList<Object> stackStorage = new ArrayList<Object>(); 

Как только вы создали это ArrayList Заметьте, что в нем нет элементов. Для того, чтобы на самом деле добавить в Integer в массив просто сделать:

stackStorage.add(number); 

И после того, как вы сделаете это, если вы звоните stackStorage.size() он должен вернуть 1, что означает, что есть один элемент в ArrayList. Если вы хотите добавить еще, просто используйте метод add(). Также убедитесь, что вы добавили тот же объект, с которым вы его создавали. Например, вы не можете хранить String в ArrayList<Integer>.

пример Полный код:

ArrayList<Integer> stackStorage = new ArrayList<Integer>(); 
stackStorage.add(10); //Now has value `10` in `index[0]` 
System.out.println("index[0]: " + stackStorage.get(0)); //Prints 10 
System.out.println("stackStorage.size() = " + stackStorage.size()) //Prints 1 

В вашем случае замените Object с Integer, если вы хотите хранить целые числа. NullPointerException означает, что ваш объект по-прежнему null, когда вы пытались позвонить size(). Это должно решить вашу проблему. Если вы не уверены, что null или не совсем понял, что такое NPE (NullPointException), я предлагаю прочитать об этом, и если у вас возникнут дополнительные трудности, разместите его здесь.

+0

Он был создан и объект теперь изменен на «Целое», но значение, которое он выводит, всегда «0», как только я добавил в стек. –

+0

@ScottSummers. Если это соответствует вашему вопросу, отметьте его как правильное ответ. А также, добро пожаловать в StackOverflow – Juxhin

1

Это потому, что size является private field и, следовательно, вы не имеете к нему доступа, где size() является public method, что вы можете использовать. Поэтому звоните size(), чтобы получить размер ArrayList. NullPointerException не имеет ничего общего с размером, это просто, потому что ваш объект не инициализирован, убедитесь, что вы инициализировали свои объекты перед их использованием.

List<Something> list = new ArrayList<Something>(); 
0

размера является частным переменной
размера() это публичный метод
Для получения размера ArrayList, вам нужно использовать размер() и перед вызовом размера() Dont забыли инициализировать массив Список, как показано ниже.

Список list = new ArrayList();

+0

Это не то, как вы инициализируете массив. – Juxhin

+0

@Juxhin .. Массив? – Tom

+0

Извините, я хочу сказать 'ArrayList'. – Juxhin