Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема со Stack. size() не увеличивается 
:(
    Опции темы
smartchecker
Дата 21.9.2013, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 28.4.2012

Репутация: нет
Всего: нет



У меня какая-то совершенная непонятка со Stack'ом.
В тестовом примере всё чудесно отрабатывает, а в рабочей проге - косяк.
Код

import java.util.Iterator;
import java.util.Stack;

public class StackExample {

    public static void main(String[] args) {

        Stack<String> sk = new Stack<String>();
        String asd;

        for (int i = 0; i < 4; i++) {
            sk.push("a" + i);
            System.out.println("stack size: " + sk.size());
        }
        
        sk.push("and (" + sk.pop() + ", " + sk.pop() + ")");

        Iterator it = sk.iterator();

        System.out.println("Size before pop(): " + sk.size());

        while(it.hasNext()) {
            String iValue = (String)it.next();
            System.out.println("Iterator value: " + iValue);
        }

        // get and remove last element from stack
        String value = (String)sk.pop();

        System.out.println("value: " + value);

        System.out.println("Size After pop(): "+sk.size());

Выхлоп предсказуемый
stack size: 1
stack size: 2
stack size: 3
stack size: 4
Size before pop() :3
Iterator value :a0
Iterator value :a1
Iterator value :and (a3, a2)
value :and (a3, a2)
Size After pop() :2

В коде
Код

        Stack<String> triadStack = new Stack<String>();
        CommonTree curT;
        String curToken;
        while (!triadList.isEmpty()) {

            curT = triadList.remove();
            System.out.println("stack size before: " + triadStack.size());

            switch(curT.getType()) {
                case MyLangLexer.AND:
                    triadStack.push("and (" + triadStack.pop() + "," + triadStack.pop() + ")" );
                    break;
                default:
                    curToken = curT.getText();
                    System.out.println();
                    triadStack.push(curToken);
                    System.out.println(" stack size after: " + triadStack.size());
                    break;
            }
        }

current token: a; stack size before: 0

current token: a; stack size after: 1
current token: b; stack size before: 0

current token: b; stack size after: 1
current token: c; stack size before: 0

current token: c; stack size after: 1
current token: d; stack size before: 0

current token: d; stack size after: 1
current token: and; stack size before: 0
[]
Exception: java.util.EmptyStackException

Где ошибка?
PM MAIL   Вверх
dorogoyIV
Дата 21.9.2013, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 3
Всего: 46



Цитата(smartchecker @  21.9.2013,  11:48 Найти цитируемый пост)
Где ошибка?

triadList and triadStack ??? Is it right?
PM MAIL   Вверх
smartchecker
Дата 21.9.2013, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 28.4.2012

Репутация: нет
Всего: нет



Цитата(dorogoyIV @ 21.9.2013,  13:33)
Цитата(smartchecker @  21.9.2013,  11:48 Найти цитируемый пост)
Где ошибка?

triadList and triadStack ??? Is it right?

Да, это разные сущности.
Код

    private Queue<CommonTree> triadList;
        Stack<String> triadStack = new Stack<String>();

PM MAIL   Вверх
dorogoyIV
Дата 21.9.2013, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 3
Всего: 46



Цитата(smartchecker @  21.9.2013,  13:36 Найти цитируемый пост)
Да, это разные сущности.

ну по приведенным кускам кода не видно - что куда и как...

почему так?:
Код

[quote=smartchecker, 21.9.2013,  11:48, post2583608]            curT = triadList.remove();
            System.out.println("stack size before: " + triadStack.size());[/quote]

ты удаляешь из triadList, а в консоль выводишь triadStack.size()

не понятно...  smile 
пожалуйста, уточните...
PM MAIL   Вверх
smartchecker
Дата 21.9.2013, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 28.4.2012

Репутация: нет
Всего: нет



Вынимается из list'a и push'ится в Stack, там где switch-case
Вот размер стэка я и вывожу. До push и после.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0570 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.