0

重複の可能性:
対称的な単語を判別するためのJavaのプログラミング

ここでは新しいですが、単語の入力を判別し、最初の単語が単語の終わりと一致するかどうかを確認するコードを作成する方法を理解するのに苦労しています。あなたはabbaを入力して、それが均等に対称であり、abaが奇妙に対称であるという答えを得ることができます。

方法を教えてください:(

主なものは2つだけです。

まず、文字の量が奇数か均等かを知りたい(文字の数を2で割った値、0.5で終わる場合は奇妙な対称、整数の場合は均等に対称)。

次に、実行の主なアイデアとなる単語内の文字の位置(つまり、1 = n、2 = n-1,3 = n-2 ...)を取得したい。奇妙な対称の単語、最後の残りの文字を無視します。

ヘッドスタートやアイデアに感謝します:)ありがとう!

KDiTragliaに感謝します、私はコードを作成してコンパイルしました、そしてここに私が置いたものがあります。私はこれ以上得ていません。

報告された問題:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: reverse cannot be resolved or is not a field reverse cannot be resolved or is not a field Syntax error, insert ") Statement" to complete IfStatement

これは私が得たものです、KDiTragliaの助け

    public class WordSymmetric {
public static void main(String[] args) {
 String word = "abccdccba";


if ( (word.length() % 2) == 1 ) {
    System.out.println("They are oddly symmetric");
    //odd
}
else {
    System.out.println("They are evenly symmetric");
    //even
}

int halfLength = word.length() / 2;
String firstHalf = word.substring(0, halfLength);
String secondHalf = word.substring(halfLength, word.length());

System.out.println(secondHalf.reverse());

if (firstHalf.equals(secondHalf.reverse()) {
    System.out.println("They match");
    //they match
} 
} }
4

6 に答える 6

1

String には reverse メソッドがありません。この目的のために、apache commons lang ライブラリを使用できます。

http://commons.apache.org/lang/api-release/org/apache/commons/lang3/StringUtils.html#reverse%28java.lang.String%29

于 2012-06-21T07:39:40.350 に答える
0

reverse()アプローチは非常にクリーンで読みやすいです。残念ながらreverse()、文字列のメソッドはありません。したがって、外部ライブラリ(appache共通lang3ライブラリのStringUtilsreverseにはメソッドがあります)を取得するか、自分でコーディングする必要があります。

public static String reverse(String inputString) {
  StringBuilder reverseString = new StringBuilder();
  for(int i = inputString.length(); i > 0; --i) {
    char result = inputString.charAt(i-1);
    reverseString.append(result);
  }
  return reverseString.toString();
}

(これは、文字に収まる文字に対してのみ機能します。したがって、より一般的なものが必要な場合は、それを拡張する必要があります。)

次に、次のようなメソッドを使用できます。

enum ePalindromResult { NO_PALINDROM, PALINDROM_ODD, PALINDROM_EVEN };
public static ePalindromResult checkForPalindrom(String inputStr) {
  // this uses the org.apache.commons.lang3.StringUtils class: 
  if (inputStr.equals(StringUtils.reverse(inputStr)) {
    if (inputStr.length % 2 == 0) return PALINDROM_EVEN;
    else return PALINDROM_ODD;
  } else return NO_PALINDROM;
}
于 2012-06-21T08:02:57.920 に答える
0

あなたはこれを適応させることができます:

    final char[] word = "abccdccba".toCharArray(); // work also with "abccccba"
    final int t = word.length;
    boolean ok = true;    
    for (int i = t / 2; i > 0; i--) {
        if (word[i - 1] != word[t - i]) {
            ok = false;
            break;
        }
        System.out.println(word[i - 1] + "\t" + word[word.length - i]);
    }
    System.out.println(ok);

コンソール :

cc
cc
bb
aa
true

于 2012-06-21T08:04:31.337 に答える
0

StringBuffer 代わりにクラスを使用String

于 2012-06-21T07:40:23.797 に答える
0
System.out.println(secondHalf.reverse());

reverse()から定義されたメソッドはありませんString

于 2012-06-21T07:36:58.673 に答える
0

おそらくword、インデックス 0 から半分 ( ) までループして、現在のインデックス ( ) の文字を残りの半分 ( ) からの対応するword.length() / 2文字と比較します。これは単なる大まかなドラフトです。奇数または偶数の対称性に応じて、おそらくループ エンド インデックスについて考える必要があります。word.charAt(i)word.charAt(word.length() - i

于 2012-06-21T07:46:26.537 に答える