2017-10-22 6 views
0

私の目標は、文字ではないものをすべてスキップしながら単語が回文かどうかをチェックするコードを作成することです。大文字と小文字も考慮していません。 私のメソッドに固執する必要がありますが、高度なコマンドを使用することはできませんが、私はこのコードを書く良い方法があると確信しています。 問題は、変数 "a"と "b"は決して変更されず、同じことを何度も何度もチェックし続けていることです。文字ではないものをスキップし、upp /小文字を気にしないPalindrome

public static void main(String[] args) { 

    String palindrom = "*0Anna'/"; 

    boolean jeto = false; 

    for (int i = 0; i < palindrom.length()/2; i++) { 

     int j = palindrom.length() - 1 - i; // right side 
     int a = palindrom.charAt(i); // left side defined by charAt 
     int b = palindrom.charAt(palindrom.length() - 1 - i); // right side 
     defined by charAt 

     if (palindrom.charAt(i) - 32 == palindrom.charAt(palindrom.length() - 1 - i) || (int) palindrom.charAt(i) + 32 == (int) palindrom.charAt(palindrom.length() - 1 - i) || palindrom.charAt(i) == palindrom.charAt(palindrom.length() - 1 - i)) { 
      jeto = true; 

     } else { 
      jeto = false; 

      while (i < j) { 
       if (a < 65 || a > 90 && a < 97 || a > 122) { 
        i++; // checks the left side for "non-letters" => skip 
       } 

       if (b < 65 || b > 90 && b < 97 || b > 122) { 
        j--; // checks the right side for "non-letters" => skip 

       } 

      } 

     } 
    } 
    if (jeto) { 
     System.out.println("is"); 
    } else { 
     System.out.println("isn't"); 

    } 

} 

}

答えて

1

あなたは文字でない文字を除去するために正規表現またはCharacter.isLetter()機能を使用することができます回文

palindrom = palindrom.replaceAll("[^a-zA-Z]", ""); 
+0

また、チェックする前にすべてを大文字に変換します。 – Randy

+0

もちろん、非常に簡単な解決策です。唯一の問題は、これらのコマンドを使用することが許可されていないことです。私は私が持っている知識(私のコードで見ている)を持って行くべきです。 –

+0

@Alexandr U Character.isAlphabetic()メソッドを使用できますか? – arjunsv3691

0

をチェックする前に、すべての非アルファベット文字を交換してみてください。

しかし、あなたはあなたの方法に固執したいと、高度なコマンドを使用する独自のisLetter関数を定義しない場合:その後、あなたのアルゴリズムを適用し、

public static boolean isLetter(int c){ 
    return (c>=65 && c<=90) || (c>=97 && c<=122); 
} 

そして、文字列内のすべての文字を確認してください。

public static void main(String[] args) { 

    String input = "*0Anna'/"; 
    String palindrom = ""; 
    for (int i = 0; i < input.length(); i++) { 
     if(isLetter(input.charAt(i))) 
      palindrom += input.charAt(i); 
    } 

    //Rest of the code 

} 

出力:

is 

また、主な問題はなく、ヨーヨーとは関係ありませんif (palindrom.charAt(i) - 32 == palindrom.charAt(palindrom.length() - 1 - i) || (int) palindrom.charAt(i) + 32 == (int) palindrom.charAt(palindrom.length() - 1 - i) || palindrom.charAt(i) == palindrom.charAt(palindrom.length() - 1 - i))行をif (a - 32 == b || a + 32 == b || a == b)に変更することができます。彼らは同じ仕事をしています。

関連する問題