我试图将字符串中的字符串添加到我的堆栈中,
这是我目前的代码:
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时,它现在会给我一个索引范围错误的字符串。
有人知道我错过了什么吗?
LinkedStack.toString
没有终止。你可能在那里错过了一个基本案例。为它添加一个合适的基础案例,和/或确保您的堆栈不会因推送或弹出错误而最终循环,并且您的打印应该可以正常工作。
你的push
实现看起来不错,pop
没有分配top
,所以肯定是坏了。
String a = "String";
Stack<Character> stack = new Stack<>();
a.chars().forEach(c -> stack.push((char)c));
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);
}