1

我正在编写一个程序来查找最多 8 个字符的单词/短语是否是回文。无论我输入什么作为输入,即使它是回文,我的程序都会打印我的 else 语句。我检查并确保我编写的代码实际上会反向打印输入,并且确实如此。所以我不太确定问题是什么。

import java.util.Scanner;
public class hw5 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String word, newWord;
int lengthOfWord;
char lc;//last character

    System.out.print("Enter word/phrase of 8 characters or less: ");
    word = in.nextLine();

    word = word.toLowerCase();
    newWord = word;
    lengthOfWord = word.length();
    lc = word.charAt(lengthOfWord -1);


    lc = word.charAt(lengthOfWord -1);

    if (word.length() == 2)
        newWord = lc+word.substring(0,1);
    else if (word.length() == 3)
        newWord = lc+word.substring(1,2)+word.substring(0,1);
    else if (word.length() == 4)
        newWord = lc+word.substring(2,3)+word.substring(1,2)+word.substring(0,1);
    else if (word.length() == 5)
        newWord = lc+word.substring(3,4)+word.substring(2,3)+word.substring(1,2)+word.substring(0,1);
    else if (word.length() == 6)
        newWord = lc+word.substring(4,5)+word.substring(3,4)+word.substring(2,3)+word.substring(1,2)+word.substring(0,1);
    else if (word.length() == 7)
        newWord = lc+word.substring(5,6)+word.substring(4,5)+word.substring(3,4)+word.substring(2,3)+word.substring(1,2)+word.substring(0,1);
    else if (word.length() == 8)
        newWord = lc+word.substring(6,7)+word.substring(5,6)+word.substring(4,5)+word.substring(3,4)+word.substring(2,3)+word.substring(1,2)+word.substring(0,1);
    else
        newWord = "error, not enough or too many characters";

    if (newWord == word)
        System.out.println("it is a palindrome");
    else
        System.out.println("it is not a palindrome");

    System.out.println(newWord);
4

4 回答 4

4

你可以让它变得更简单。

word = word.toLowerCase();
newWord = new StringBuilder(word).reverse().toString();

if (newWord.equals(word))
     System.out.println("it is a palindrome");
 else
      System.out.println("it is not a palindrome");
于 2013-09-25T23:48:08.240 回答
2

Strings 是对象。字符串变量只是指向字符串对象的指针。因此,当您这样做时if(newWord==word),您不是在比较字符串的内容,而是在比较这些指针中的值(指针也指向的内存位置)。您需要使用String'equals方法来比较两个字符串的内容。

于 2013-09-25T23:48:16.907 回答
2
if (newWord.equals(word))
        System.out.println("it is a palindrome");
else
        System.out.println("it is not a palindrome");

使用==的时候,不比较的话,比较的是两个变量在内存中的索引。

于 2013-09-25T23:44:05.593 回答
2

==意味着运行时将检查它们是否指向相同的地址,equals将检查两个对象是否具有相同的内容。所以尝试使用该equals方法来比较字符串和==数字。

于 2013-09-25T23:46:18.220 回答