2013-05-22 16 views
0

請問有人能指出我程序中的錯誤嗎?Java-Check迴文檢測

輸出始終是:「它不是一個迴文」

String newstr=""; 
for(int j=length-1;j>0;j--) 
{ 
    char m=str.charAt(j); 
    newstr=newstr+m; 
} 
if(newstr.equals(str)) 
    System.out.println("it is a palindrome"); 
else 
    System.out.println("it is not a palindrome"); 

在此先感謝:)

+0

請不要修改你的問題默默納入答案給定的所有修復這使得它不可能看到什麼居然問也。 - - 你起來日期代碼應該可以工作,所以沒有更多的問題需要回答。 – creinig

+0

@creinig更新後的代碼失敗,請參閱[Shah's answer](http://stackoverflow.com/a/16690648/2040040) – johnchen902

+0

對不起,不,它仍然不起作用。 – aqua

回答

3

首先,使用String.equals()來比較,而不是==字符串。

if(newstr.equals(str)) 

此外,串指數從0開始,所以你需要:

for(int j=length-1;j>=0;j--) 

修復都應該工作。

3
if(newstr==str) 

大概應該是

if (newstr.equals(str)) 

而且做對象比較閱讀起來。你有效地比較了兩個指針,而不是字符串內容。

當然,與Java 5及以後,你可以只是做

new StringBuilder(str).reverse().toString().equals(str); 

乾杯,陣列的

+0

它仍然無法正常工作 – aqua

2

指數從0開始。我猜你應該使用

for(int j=length-1;j>=0;j--) 

代替

for(int j=length-1;j>0;j--) 
1

==運算符檢查兩個參考點是否都是同一個對象。 .equals()方法將實際檢查字符串的內容。

所以,你的代碼必須是引用相等

if(newstr.equals(str)) 
    System.out.println("it is a palindrome"); 
    else 
    System.out.println("it is not a palindrome"); 
0

==測試。

.equals()試驗值相等。

因此,如果你真的想測試兩個字符串是否具有相同的值,你應該使用.equals()(除了在少數情況下,您可以保證通過相同的對象具有相同值的兩個字符串將被表示

這將是最後的代碼閱讀string comparison in java

String newstr=""; 

    for(int j=length-1;j>0;j--) 
    { 
     char m=str.charAt(j); 
     newstr=newstr+m; 
    } 
    if(newstr.equals(str)) 
    System.out.println("it is a palindrome"); 
    else 
    System.out.println("it is not a palindrome"); 
0
public static boolean isPaliandrome(String str) { 
     StringBuilder lettersBuff = new StringBuilder(str); 
     String str_inverse = lettersBuff.reverse().toString(); 
     char[] charArrayInverse = str_inverse.toCharArray(); 
     boolean isPaliandrome = false; 
     String caracInverseConverted = new String(charArrayInverse); 
     if (str.equals(caracInverseConverted)) { 
      isPaliandrome = true; 
     } 
     return isPaliandrome; 
    }