Добавление символа из строки в стек - PullRequest
1 голос
/ 20 сентября 2011

Я пытаюсь добавить символы из строки в текстовом поле в мой стек,

пока мой код:

String s = txtString.getText();
Stack myStack = new LinkedStack();

  for (int i = 1; i <= s.length(); i++)
{
    while(i<=s.length())
        {
         char c = s.charAt(i);
        myStack.push(c); 
        }
       System.out.print("The stack is:\n"+ myStack);
}

Мой метод push и pop из LinkedStack

public void push(Object item){
  top = new ListNode(item, top); 
}

public void pop(){
  if(isEmpty())
    throw new StackUnderflowException("Nothing removed-stack is empty");
  else
   top = top.getNext();
}

Метод getnext () происходит из другого пакета, называемого listnodes

public ListNode getNext() {
    return nextNode; // get next node
} // end method getNext

, когда я изменяю печать на + c, все символы из моей строки выводятся, но когда это myStack,теперь выдает мне строку с ошибкой диапазона индекса.

Кто-нибудь знает, что мне не хватает?

Ответы [ 3 ]

2 голосов
/ 20 сентября 2011

LinkedStack.toString не заканчивается. Вы, вероятно, пропустили базовый случай там. Добавьте к нему правильный базовый регистр и / или убедитесь, что ваш стек не является циклическим из-за ошибки в push или pop, и ваша печать должна работать нормально.

Ваша реализация push выглядит нормально, pop не присваивает top, поэтому она определенно не работает.

1 голос
/ 28 февраля 2019
String a = "String";
Stack<Character> stack = new Stack<>();
a.chars().forEach(c -> stack.push((char)c));
0 голосов
/ 15 апреля 2017
String s = txtString.getText();
Stack myStack = new LinkedStack();

for (int i = 1; i <= s.length(); i++)
{
    while(i<=s.length())
        {
            char c = s.charAt(i);
            myStack.push(c); 
         }
     System.out.print("The stack is:\n"+ myStack);
}

Ваш цикл for должен начинаться с 0 и быть меньше длины.Другая ошибка заключается в том, что цикл while работает бесконечно, поскольку 1 всегда будет меньше длины или любого числа в этом отношении, пока длина строки не пуста.Так что в вашем случае я бы просто удалил оператор while и просто сделал все это в цикле for, ведь цикл for будет выполняться столько раз, сколько в вашей строке есть элементов.

Исправлена ​​версия, которая выполняетчто вы хотите сделать.

 for (int i = 0; i < s.length(); i++)
    {
          char c = s.charAt(i);
          myStack.push(c); 

          System.out.print("The stack is:\n"+ myStack);
    }
...