我正在尝试将字符串中的字符串添加到我的堆栈中,
到目前为止,这是我的代码:
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时,它现在会给我一个索引范围错误的字符串。
有人知道我错过了什么吗?
答案 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);
}