从字符串到堆栈添加char

时间:2011-09-20 00:03:05

标签: java stack palindrome

我正在尝试将字符串中的字符串添加到我的堆栈中,

到目前为止,这是我的代码:

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);
}

来自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 个答案:

答案 0 :(得分:2)

LinkedStack.toString未终止。你可能在那里错过了一个基本案例。为它添加一个合适的基础案例,和/或确保您的堆栈不会因推送或弹出错误而最终循环,并且您的打印应该可以正常工作。

您的push实施工作看起来没问题,pop未指定top,因此肯定会被破坏。

答案 1 :(得分:1)

String a = "String";
Stack<Character> stack = new Stack<>();
a.chars().forEach(c -> stack.push((char)c));

答案 2 :(得分:0)

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);
    }