2013-07-07 35 views
-2

我正在檢查輸入的單詞是否是迴文。也就是說,它的翻版與其原文相同。這裏是我正在使用的方法:反向數組算法

//Change word to char array and reverse array. 
//Change char array back to String. Checks if word and reversed string are equal 
public boolean isAPalindrome(){ 
    char[] charArray = word.toCharArray(); 
    for(int i = 0; i < (charArray.length/2); i++){ 
     char temp = charArray[i]; 
     charArray[i] = charArray[charArray.length - 1 - i]; 
     charArray[charArray.length - 1 - i] = temp; 
    } 

    if(word.equals(charArray.toString())) 
     return true; 
    else 
     return false; 
} 

當我輸入racecar時,程序返回false時,它應該是true。

+0

和問題是什麼? – Ankit

+2

當您在調試器中瀏覽代碼時,您發現了什麼? –

+0

對不起,我忘了補充一點。 – dirtysocks45

回答

5

這太長了評論,但不是一個真正的解決方案。我將只發佈一個提示,讓你自己找到解決方案,因爲你會學到更多自己做這件事,而不是複製/粘貼:

char[] chars = {'a', 'b', 'c'}; 
System.out.println(chars.toString()); 
// prints something like: [[email protected] 
System.out.println(new String(chars)); 
// prints abc 

因爲toString()是如何對數組實現的方式。

+0

我明白了。我從來沒有用過toString()。事實上,我只是猜測它是一種方法並輸入它,因爲我知道CharArray是一種方法。它現在有效。 – dirtysocks45

+1

@ user2398046 Theres沒有錯看到一個方法並試用它,但要確保它在你將它作爲程序的核心部分之前做到了你所想的。 (+1也提供了作業問題的提示) –

+0

數組是一種對象(至少我是這麼教的),而Object類實現了toString()來打印出類的名字,而地址記憶中的對象。你可以按照@RichardTingle的建議做的一件事就是'System.out.println(charArray.toString());',這樣你就可以看到它給了你什麼。不過,給@jlordo +1會給出提示而不是答案。 –

1

沒有必要創建一個臨時數組來執行此操作。嘗試:

public boolean isPalindrome(String word) { 
    int len = word.length(); 
    for(int i=0;i<len/2;i++) { 
     if (word.charAt(i)!=word.charAt(len-i-1)) { 
      return false; 
     } 
    } 
    return true; 
} 
1
String word = "racecar"; 
      char[] charArray = word.toCharArray(); 
      for(int i = 0; i < (charArray.length/2); i++){ 
       char temp = charArray[i]; 
       charArray[i] = charArray[charArray.length - 1 - i]; 
       charArray[charArray.length - 1 - i] = temp; 
      } 

      if(word.equals(new String(charArray))) // please change here. 
       return true; 
      else 
       return false;