2015-09-19 102 views
1

我在java中使用堆棧編寫了一個迴文。但是,由於某些原因,彈出堆棧時程序無法按預期工作。我也嘗試使用頂部和迭代使用這個變量。無論哪種方式,它不工作。迴文使用堆棧

import java.util.Stack; 

class Palindromer { 

Stack<Character> stack = null; 
int top = -1; 

public boolean isPalindrome(String s) { 
    for (int i = 0; i < s.length(); i++) { 
     stack = new Stack<Character>(); 
     stack.push(s.charAt(i)); 
     top++; 
    } 

    System.out.println("value of top is " + top); 
    String returnString = ""; 

    while (!stack.isEmpty()) { 
     returnString += stack.pop(); 
    } 
    System.out.println(returnString); 

    return returnString.equals(s); 
} 
} 

public class PalindromeChecker { 
public static void main(String[] args) { 
    Palindromer palin = new Palindromer(); 
    if (palin.isPalindrome("BananaB")) { 
     System.out.println("is palindrome"); 
    } else { 
     System.out.println("not a palindrome"); 
    } 
} 
} 
+0

不要在你的'for'環實例化一個新的空'Stack' ... BTW:[相關](http://stackoverflow.com/questions/7569335/reverse-a-string -in-java的)。 – Kenney

+0

哇謝謝,這工作。 – dataEnthusiast

+0

@WhiteViking沒有重複,您提交的問題質量很低。 – Wolf

回答

1

您應該將new Stack<Character>();放在循環之外。

你做的方式:

for (int i = 0; i < s.length(); i++) { 
     stack = new Stack<Character>(); 
     stack.push(s.charAt(i)); 
     top++; 
    } 

stack變量重新分配各環路和它僅包含一個循環之後的字符。它變成

stack = new Stack<Character>(); 
    for (int i = 0; i < s.length(); i++) { 
     stack.push(s.charAt(i)); 
     top++; 
    } 

BTW:在isPalindrome方法更好的聲明stacktop。所以你在進一步調用的情況下襬脫top的錯誤。

0

你應該初始化外循環堆棧即

for (int i = 0; i < s.length(); i++) { 
     stack = new Stack<Character>(); 
     stack.push(s.charAt(i)); 
     top++; 
    } 

應該

stack = new Stack<Character>(); 
for (int i = 0; i < s.length(); i++) { 

     stack.push(s.charAt(i)); 
     top++; 
    } 
0

使用以下版本isPalindrome方法,Stack對象是越來越實例化在每個循環迭代,因此你沒有得到預期的行爲。

public boolean isPalindrome(String s) { 
    stack = new Stack<Character>(); 
    for (int i = 0; i < s.length(); i++) { 
     stack.push(s.charAt(i)); 
     top++; 
    } 

    System.out.println("value of top is " + top); 
    String returnString = ""; 

    while (!stack.isEmpty()) { 
     returnString += stack.pop(); 
    } 
    System.out.println(returnString); 

    return returnString.equals(s); 
}