我正在尝试测试输入的单词是否是回文(正反拼写相同)。从我看到的结果来看,它应该起作用,但是Eclipse表示“未使用局部变量isPalindrome的值”,但已使用它。问题是,即使这个词不是回文,它也会说它是回文。

import java.util.Scanner;

public class Palindrome {
    public static void main(String[] args) {
        String phrase;
        char[] phraseLetters;
        int endChar;
        boolean isPalindrome;

        Scanner input = new Scanner(System.in);
        System.out.println("Enter a word or phrase.");
        phrase = input.nextLine();
        input.close();

        phrase = phrase.toLowerCase();
        phrase = phrase.replaceAll(" ","");
        phraseLetters = phrase.toCharArray();

        endChar = phraseLetters.length - 1;

        for (int i = 0; i < phraseLetters.length; i++) {
            if (phraseLetters[i] != phraseLetters[endChar]) {
                isPalindrome = false;
            } else {
                isPalindrome = true;
                endChar -= 1;
            }
        }

        if (isPalindrome = true) {
            System.out.println("This word or phrase entered is a palindrome.");
        } else {
            System.out.println("This word or phrase is not a palindrome.");
        }
    }
}


编辑:我已经尝试过if语句

    if (isPalindrome == true)




    if (isPalindrome)


在这两种情况下,Eclipse在这种情况下都说“本地变量isPalindrome可能尚未初始化”。

最终编辑:

此后,我继续进行操作,并重写了这段代码,但是如果有人仍然在看,我就回过头去修复我的原始代码。

我在代码的开头初始化了isPalindrome:

Boolean isPalinddrome = True;

我将for循环条件更改为:

for (int i = 0; (i < phraseLetters.length) && (isPalindrome); i++)

最后,我将if (isPalindrome = true)更改为if (isPalindrome)

最佳答案

if (isPalindrome = true)应该是if (isPalindrome == true)(或if (isPalindrome)更好!实际上,此错误是为什么不问someBoolean == true这是一种不良样式的另一个很好的原因)

通过输入if (isPalindrome = true),您再次将值true分配给变量isPalindrome。而且由于您只是为其分配值,因此编译器会警告您有关未使用的变量。

知道这一点也很好:


  在运行时,赋值表达式的结果为
  分配发生后的变量。的结果
  赋值表达式本身不是变量。


因此,当您执行if (isPalindrome = true)时,如果条件始终满足。

09-06 14:33