从字符串到堆栈添加char

问题描述 投票:1回答:3

我试图将字符串中的字符串添加到我的堆栈中,

这是我目前的代码:

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的push和pop方法

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时,它现在会给我一个索引范围错误的字符串。

有人知道我错过了什么吗?

java stack palindrome
3个回答
2
投票

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

你的push实现看起来不错,pop没有分配top,所以肯定是坏了。


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

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);
    }
© www.soinside.com 2019 - 2024. All rights reserved.