1

私は、単語リスト ファイルに埋め込まれている回文のリストを見つける方法について、Java 用のプログラムに取り組んでいます。私はJavaクラスの紹介をしているので、どんな種類のヘルプやガイダンスも大歓迎です!

これが私がこれまでに持っているコードです:

import java.util.Scanner;
import java.io.File;

class Palindromes {

    public static void main(String[] args) throws Exception {
        String pathname = "/users/abrick/resources/american-english-insane";
        File dictionary = new File(pathname);
        Scanner reader = new Scanner(dictionary);
        while (reader.hasNext()) {
            String word = reader.nextLine();
            for (int i = 0; i > word.length(); i++) {
                if (word.charAt(word.indexOf(i) == word.charAt(word.indexOf(i)) - 1) {
                    System.out.println(word);
                }
            }
        }
    }
}

インポート中のリストに 7 文字以上の単語が 3 つあります。

4

4 に答える 4

0

文字列で読んでいると仮定しています。string.toCharArray()各文字列を char[] に変換するために使用します。次のように for ループを使用して文字配列を反復処理します。反復 1 で、最初の文字が最後の文字と等しい場合は次の反復に進み、そうでない場合は false を返します。反復 2 で、2 番目の文字が最後から 2 番目の文字と等しい場合は次の反復に進み、そうでない場合は false を返します。というように、文字列の中央に到達するまで続け、その時点で true を返します。オフ バイ ワン エラーに注意してください。偶数の長さのストリングもあれば、奇数の長さのストリングもあります。

回文チェッカーで大文字と小文字が区別されない場合は、 を使用string.toLowerCase().toCharArray()して文字配列を前処理します。

for ループのstring.charAt(i)代わりに使用できます。string.toCharArray()この場合、回文チェッカーが大文字と小文字を区別しない場合は、文字列を次のように前処理します。string = string.toLowerCase()

于 2013-04-14T22:59:34.150 に答える
0

この問題を解決するにはいくつかの方法があります。

次の場合、単語は回文と見なされます。

  • 順方向と逆方向の同じ方法で読み取ることができます。
  • 最初の要素は、真ん中に到達するまで、最後の要素と同じです。
  • 単語の半分は、残りの半分と同じで、反転しています。
  • 長さ 1 の単語は自明に回文です。

最終的に、あなたの方法はその多くを行っていません。実際、検証はまったく行っていません。最初と最後の文字が一致する場合にのみ、単語を出力しています。

ここに提案があります: String の両端を読んで、それが回文かどうか見てみましょう。空であるか、長さが 1 である可能性がある場合を考慮に入れる必要があります。また、検証でエラーが発生する可能性があるため、文字列内の空白を取り除きたいと考えています。これreplaceAll("\\s", "")を解決するために使用します。

 public boolean isPalindrome(String theString) {
    if(theString.length() == 0) {
        throw new IllegalStateException("I wouldn't expect a word to be zero-length");
    }
    if(theString.length() == 1) {
        return true;
    } else {
        char[] wordArr = theString.replaceAll("\\s", "").toLowerCase().toCharArray();
        for(int i = 0, j = wordArr.length - 1; i < wordArr.length / 2; i++, j--) {
            if(wordArr[i] != wordArr[j]) {
                return false;
            }
        }
        return true;
    }
}
于 2013-04-14T23:03:10.247 に答える