2016-04-27 30 views
0

這段代碼有什麼問題。 Doessnt work..returns整個字符串逆轉...... 我試圖檢查是迴文程序檢查最長的迴文不工作

我使用蠻力方法來檢查每個子爲迴文最長的串。 爲什麼會這樣不行

public class LongestPalindrome { 

    static String s = "yogaranjnarsap"; 
    static String test = ""; 
    static String result =""; 
    static int resultLen = 0; 
    static String temp = ""; 

    static void checkPalindrome(String str) 
    { 
     StringBuilder sb = new StringBuilder(str); 
     StringBuilder sb1 = new StringBuilder(); 

     sb1 = sb.reverse(); 
     if(sb1.toString().equals(sb.toString())) 
     { 
      //System.out.println(sb1.equals(sb)); 

      if(sb.length() > result.length()) 
      { 
       result = sb.toString(); 
       resultLen = sb.length(); 
      } 
     } 
    } 



    public static void main(String[] args) { 

     for(int i=0;i<s.length();i++) 
     { 
      temp = "" + s.charAt(i); 

      for(int j=i+1;j<s.length();j++) 
      { 
       temp = temp + s.charAt(j); 
       checkPalindrome(temp); 
       //temp = temp + s.charAt(i); 

      } 
      temp =""; 
     } 

     if(result.length() > 1) 
     { 
     System.out.println(result); 
     System.out.println("length" + resultLen); 
     } 

     else 
      System.out.println("no palindrome found"); 
    } 

} 
+4

這是學習如何使用調試器的絕佳機會。查找如何使用您正在使用的IDE進行調試,並逐行掃描代碼。這樣做對你來說是至關重要的,而不是讓某人把答案轉儲給你。 – Kon

+0

@Kon謝謝老大..我需要這個建議! –

回答

2

sb.reverse()逆轉sb,並返回該對象。

因此sb1 = sb.reverse();將反轉sb並將sb1轉換爲sb

你想做的事:

StringBuilder original = new StringBuilder(str); 
StringBuilder reverse = new StringBuilder(str).reverse(); 
0

問題是這一行:

sb1 = sb.reverse(); 

reverse()方法反轉sb本身,因此sbsb1均引用同StringBuilder對象,其中包含與str相反。試試這個,而不是宣佈sbsb1

String revStr = new StringBuilder(str).reverse().toString(); 

然後只需用strsb1.toString()revStr取代sbsb.toString()所有實例。