2011-09-20 125 views
1

我想从一个字符串中添加一个文本的字符到我的堆栈,从字符串添加字符叠

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

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

您没有给我们提供'LinkedStack'的代码,那么我们如何提供帮助? –

+0

不应该在循环外打印堆栈吗?此外,您需要“弹出”堆栈以获取反向字符串。 –

+0

+1 @ Oli Charlesworth。如果您使用Java自己的Stack类实现,它应该是Stack。 –

回答

2

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

您的push执行看起来不错,pop不会分配top,所以肯定是坏了。

+0

pop使用getNext()将top分配给nextNode不是吗? – Peerkon

+0

我不知道,是吗? –

+0

@Peerkon,不,不。也不应该。 get方法不应该修改事物。只有用含有变量的动词命名的方法,比如'set'或'replace',才能改变数据。并且您正确定义了'getNext',就像'return nextNode'一样。那里没有'top ='。 –

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