2014-08-28 112 views
-1

我需要確保在每次分配時都必須編寫自己的原始代碼,而不是複製其他人的代碼。這看起來比你期望的要難。我試圖寫一個迴文檢測器作爲任務的一部分。代碼很好,除了一個問題。輸出結果表明它是真實的,即使它不是一個迴文序列,它以相同的字符開始和結束。請你幫我。這裏是我的代碼:即使不是迴文,迴文檢測器也會返回true

public static boolean isPalindrome_nr(String word){ 
    int beginning = 0; 
    int end = word.length() - 1; 

    boolean pd = true; 

    for (int i = end; i>0; i--){ 
     if(word.charAt(0) == word.charAt(word.length()-1)){ 
      pd = true; 
     } 
     else if (word.charAt(0) != word.charAt(word.length()-i)){ 
      pd = false; 
     } 
    } 

    return pd; 
} 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    Scanner scan = new Scanner(System.in); 
    System.out.println("Is the string a palindrome or not? "); 
    String test = scan.nextLine(); 
    System.out.println("Answer: " + isPalindrome_nr(test)); 
} 

的目標是獲得了這個詞的測試,這是不是一個迴文,註冊爲假,ABBA,這是一個迴文,註冊爲真,應用程序,這是不是一個迴文,註冊爲false。

回答

4

您只比較第一個和最後一個字符。這還不足以確定字符串是否是迴文。

你需要的東西是這樣的:

pd = true; 
for (int i = end; i>=0; i--){ 
    if(word.charAt(i) != word.charAt(end-i)){ 
     pd = false; 
     break; 
    } 
} 

這可以進一步提高,因爲這個循環會測試所有對的兩倍,因此它可能不夠,我在年底結束/ 2或(結束/ 2) +1。

0

您只查看第一個和最後一個字符。該方法應該是這樣的,使您的for循環實際上做什麼它應該:

public static boolean isPalindrome_nr(String word) { 
    int beginning = 0; 
    int end = word.length() - 1; 

    boolean pd = true; 

    for (int i = end; i > 0; i--) { 
     // notice the use of i in here so that it will check all opposite chars 
     if(word.charAt(i) == word.charAt(word.length() - 1 - i)) { 
      pd = true; 
     } 
     else { // don't need the else-if 
      pd = false; 
     } 
    } 

    return pd; 
} 

只是作爲一個額外的音符,還有另一種方式來測試一個字符串是否是迴文與否:將其反轉並測試反轉字符串是否與原始字符串相同。像這樣的(這是一個班輪):

public static boolean isPalindrome(String s) { 
    return new StringBuilder(s).reverse().toString().equals(s); 
} 

或者更長的路(倒車字符串以一個for循環,而不是使用StringBuilder#reverse()方法

public static boolean isPalindrome(String s) { 
    StringBuilder reverseString = new StringBuilder(); 

    // reverse the string 
    for (int i = s.length() - 1; i > -1; i--) { 
     reverseString.append(s.charAt(i)); 
    } 

    // return whether or not the reversed string is equal to the original string 
    return reverseString.toString().equals(s); 
} 
+0

你應該使用StringBuilder過的StringBuffer沒有需要同步開銷 – 2014-08-28 02:30:18

+0

@ Smith_61其實我只是想複製錯誤的單詞,謝謝。 – 2014-08-28 02:37:45

相關問題