0

可能的重复:
编程java以确定对称词

我是新来的,但是我很难弄清楚如何编写代码来确定单词的输入并查看第一个是否与单词的结尾匹配。您可以输入 abba 并得到答案,它是均匀对称的,而 aba 是奇怪对称的。

请告诉我如何:(

主要有两点。

首先我想知道它是奇数还是偶数的字母(字母数除以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

字符串没有反向方法。为此,您可以使用 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
System.out.println(secondHalf.reverse());

没有reverse()定义方法String

于 2012-06-21T07:36:58.673 回答
0

使用类StringBuffer 而不是String

于 2012-06-21T07:40:23.797 回答
0

我可能会word从索引 0 循环到一半 ( word.length() / 2) 并将当前索引 ( word.charAt(i)) 处的字符与另一半 ( word.charAt(word.length() - i) 的对应字符进行比较。这只是一个粗略的草案,您可能需要考虑循环结束索引,取决于奇数或均匀对称性。

于 2012-06-21T07:46:26.537 回答
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
真的

于 2012-06-21T08:04:31.337 回答