2017-07-12 4 views
-6
public static String reverseString(String str) 
     { 
      String a = "";   
      for (int k= 1; k<str.length(); k++) 
      { 
       a = str.substring(k, k+1); 
       str = a + str.substring(0, k) + str.substring(k+1); 
      } 
      return str; 
     } 
    public boolean isPalindrome(String str) 
     { 
      if(str.equals(reverseString(str))) 
      { 
       return true; 
      } 
      else 
      { 
       return false; 
      } 
     } 

なぜ上記のコードは常にtrueを返しますか?私はそれが回文であればtrueを返すプログラムをwhileループで作成しようとしています。なぜこのプログラムはtrueを返しますか?

+1

印刷ステートメントを追加したか、デバッガを使用して、どのステップが期待どおりに動作していないかを把握しましたか? – csmckelvey

+0

コードのデバッグを検討しましたか?たとえば、逆転メソッドが実際に動作するかどうかを確認しますか? – EJP

+0

あなたの 'reverseString'メソッドは奇妙に見えます。代わりに 'new StringBuilder(str).reverse()。toString()'を使用してください。それはうまくいくはずです。 – A1m

答えて

0

StringBuilders reverseを使用します。それはうまくいくはずです。

public boolean isPalindrome(String str) 
    { 
     if(str.equals(new StringBuilder(str).reverse().toString())) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 
+0

whileループについての部分を読んでいらっしゃいましたか? –

+1

@ J.Knight明らかにOPは彼が書いたことがないので、whileループに関して自分の部分を読んでいないようです。 – EJP

2
public static void main(String args[]) { 

     System.out.println(isPalindrome("abcdcba")); 
     System.out.println(isPalindrome("abcdefg")); 

    } 

    public static boolean isPalindrome(String str) { 
     if (str.equals(reverseString(str))) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

    public static String reverseString(String str) { 
     String a = ""; 
     for (int k = 1; k < str.length(); k++) { 
      a = str.substring(k, k + 1); 
      str = a + str.substring(0, k) + str.substring(k + 1); 
     } 
     return str; 
    } 

出力:

true 
false 

それはあなたのプログラムが文字列が回文であるかどうかを実装できることが表示されます

+0

'reverseString()'が正しく動作しません。 'everseString( "定食") 'は'食定値? 'を返す – saka1029

+0

@ saka1029これは単なる文字セットの問題でない限り、OPの方法であり、このポスターではなく、失敗を再現できません。 – EJP

+0

@EJPこのコードはサロゲートペアを上下逆さまにします。 – saka1029

-1

あなたがする必要があるすべてはあなたのための変更です。次のようなことをしてwhileループにループします。

public static String reverseString(String str) 
{ 
    String a = "";   

    int k = 1; 
    while(k < str.length()) 
    { 
     a = str.substring(k, k+1); 
     str = a + str.substring(0, k) + str.substring(k+1); 
     k++; 
    } 
    return str; 
} 
0

あなたはおそらくisPalindrome()を意味していることにより、「上記のコードは」、常にtrueを返す場合、あなたが唯一の回文ある文字列でそれをテストしているので、それだけですることができます。

関連する問題