2014-10-20 52 views
3

因此,我正在制定一個程序來識別迴文林(相同的向前和向後的文字)。爲了達到這個目的,我把一個字符串的內容一次放入一個隊列和一個字符堆棧中。然後我有一個for循環比較堆棧的條目和隊列的條目,看看它們是否匹配。如果每個字符都比我們有一個迴文。任何不匹配的字符都會導致匹配標誌變爲假並打破循環。問題是我的for循環不會運行。該程序完全跳過它。事實上它告訴我我的「匹配」變量未被使用。任何幫助,將不勝感激。感謝您閱讀我的文章。檢測迴文林

** 我對我的模糊感到抱歉。堆棧和隊列是我自己設計的類。他們接受一個字符串輸入,將字符串分成字符(字符類型),爲每個字符創建一個節點並連接它們。堆棧先進先出,隊列先進先出。空白1和空白2是作爲每個內部起始標記的空節點。

public void palVerify(String s) 
{ 
    boolean match=true; 

    //creates stack 
    Stack backward=new Stack(blank1); 
    backward.push(s); 

    //creates queue 
    Queue forward=new Queue(blank2); 
    forward.enqueue(s); 


    // THIS LOOP WONT RUN 

    for (int i=0; i < s.length(); i++) 
    { 
     if (backward.readTop()==forward.readFront()) 
     { 

      backward.pop(); 
      forward.dequeue(); 
     } 
     else 
     { 
      match=false; 
      break; 
     } 

    } 

    if (match=true) 
     System.out.println("This word is a Palindrome"); 
    else 
     System.out.println("This word is not a Palindrome"); 


} 
+1

你能提供您怎麼稱呼palVerfiy()?你也應該給堆棧和隊列一個對象類型。我很驚訝'落後.readTop()== forward.readFront()'甚至編譯。什麼是空白1和空白2? – Grice 2014-10-20 20:14:01

+3

你的意思是'if(match == true)'? – 2014-10-20 20:22:44

+3

除了Andy的評論,你的意思是'if(match)'。請不要陷入'if(match == true)'的反模式。 – pamphlet 2014-10-20 20:26:18

回答

1

你永遠在你的代碼評估match,只分配給它。這就是爲什麼你得到未使用的變量警告。

您可能想要在底部的if語句中評估match - 用if(match=true)(它將true分配給匹配變量)替換爲if (match)(根據其值評估變量和分支)。

在您的for循環 - 它可能正在運行(您可以在System.out.println("Here");添加到它的開始來證明這一點。然而,你正在使用的比較字符串== - 字符串比較應該使用equals方法

我不確定blank1blank2是什麼;我假設它們是在方法外聲明的成員或靜態變量。我不認爲你的邏輯做了迴文檢測(比較backward.readTopforward.readFront做了你認爲的事情) ,除非您使用您自己的定製版本StackQueue

-1
public class JustForShow { 

    public boolean isPalindrome(String text){ 
     if(text == null || text.isEmpty()) 
      return false; 

     char []arr = text.toCharArray(); 
     for (int i = 0,y = (arr.length - 1); i<y; i++,y--) { 
      if(arr[i] != arr[y]){ 
       return false; 
      } 
     } 
     return true; 
    } 

    public static void main(String[] args) { 
     String palind = "ABCDDCBA"; 
     JustForShow jfs = new JustForShow(); 
     System.out.println(jfs.isPalindrome(palind)); 
    } 
} 
+1

儘管這提供了一個(更好的)「isPalindrome」的替代實現,但這並不能真正幫助OP知道如何解決他們自己的代碼中的問題。 – Krease 2014-10-20 20:39:25

+0

我明白他的做法,但有太多未知他的問題,所以我想提供一個解決方案。 – 2014-10-20 20:41:07

-1

這裏是一個工作的解決方案:

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 

    System.out.print("Enter a three-digit integer: "); 
    int number = input.nextInt(); 

    if (number/100 == number % 10) 
     System.out.println(number + " is a palindrome"); 
    else 
     System.out.println(number + " is not a palindrome"); 
} 
+0

該OP沒有要求您的解決方案,他問爲什麼*他的*解決方案無法正常工作。 – 2015-10-04 12:45:35

+0

這被標記爲低質量答案。請嘗試改善您的問題。現在,我只會編輯縮進,但其他評論者可能會更加嚴重 – Dici 2015-10-04 13:47:00