2016-05-21 155 views
-2
import java.util.Scanner; 
import java.util.Stack; 

public class Stack_1 { 
    public static void main(String[] args) { 
     String val; 
     Scanner input = new Scanner(System.in); 
     System.out.println("Enter Text: "); 
     val = input.nextLine(); 
     push(val); 
    } 

    public static void push(String str) { 
     Stack<Character> stk = new Stack<Character>(); 
     for (int i = 0; i < str.length(); i++) { 
      stk.push(str.charAt(i)); 
     } 
     System.out.println(stk); 
     String reverseString = ""; 
     String original = ""; 
     int length = original.length(); 
     for (int i = length - 1; i >= 0; i--) 
      reverseString = reverseString + original.toUpperCase().charAt(i); 
     if (original.toUpperCase().equals(stk)) 
      System.out.println("The string is a palindrome."); 
     else if (reverseString.toUpperCase().equals(stk)) 
      System.out.println("The string is not a palindrome."); 
    } 
} 

任何人都可以幫助我。我不知道我錯在哪裏。問題是創建一個堆棧(字符),並顯示它是否是迴文的文本。用戶必須輸入輸入。Java二叉搜索樹實現

P.S這是我的實驗室測試之一。

+0

這個問題的標題是否與檢查字符串是迴文是否有關? – KevinO

+0

發佈[mcve],你不能只發布代碼並說「修復它」。 –

+0

我只需要關於如何改進我的代碼的指導和建議。從那裏我可以修復它。 – Helmet

回答

0

如果我正確地跟着代碼,問題似乎是OP正在比較String對象(originalreverseString)到Stack<Character>對象。

因此,可能的故障是String對象與Stack對象的不正確嘗試比較。

我認爲在if/else if邏輯中存在第二次失敗,因爲「cool」的示例輸入不是迴文,但在這種情況下沒有輸出。

編輯:儘管OP代碼確實嘗試針對輸入數據的情況(在問題中沒有給出)來調整,但它沒有考慮空格或其他標點符號。根據the entry on Wikipedia about Palindromes,標點符號通常也被忽略。同樣,無論是關注空間,時段,破折號等等,都是問題中沒有定義的練習的一部分。根據完整的要求,這個問題有點不明確。

我會使用堆棧將採取String,通過人物推到Stack(可能糾正情況和剝離出來,當時所有的標點),然後從Stack彈出做一個比較想一個解決方案。我認爲OP代碼在使用Stack時缺少部分要求。

只有Stack上只有字符的示例代碼。還有其它的方法,當然:

// push by character onto the stack; use only 
// characters, and convert to lower case 
for (int i = 0; i < str.length(); i++) { 
    char c = str.charAt(i); 
    if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) { 
     stk.push(Character.toLowerCase(c)); 
    } 
} 

實施例以從校驗字符串中刪除所有的非字符:

// convert out comparison String to lower case and remove 
// all non letters 
String chk = str.toLowerCase().replaceAll("[^a-z]", ""); 

例循環中使用的Stack所要檢查的字符串:

// assume we have a palindrome 
    boolean palindrome = true; 
    // counter across the String 
    int i = 0; 

    // loop while there is more on the stack and we haven't 
    // failed our test 
    while (! stk.isEmpty() && palindrome) { 
     Character c = stk.pop(); 
     palindrome = (c == chk.charAt(i++)); 
    } 

樣品測試數據:

酷是迴文:假
媽媽是迴文:真正
決不奇數或偶數是迴文:真正
一個人,一個計劃,運河 - 巴拿馬!是一個迴文:真