未使用局部变量

Fer*_*et9 0 java eclipse local-variables palindrome

我试图测试输入的单词是否是回文(相同的拼写向前和向后).从我可以看到它应该工作,但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.");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

    if (isPalindrome == true) 
Run Code Online (Sandbox Code Playgroud)

    if (isPalindrome)
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,Eclipse在这个if条件中说"局部变量isPalindrome可能尚未初始化".

最终编辑:

我已经移动了,并重写了这段代码,但是如果有人还在看这个,我只是回去修复原始代码.

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

Boolean isPalinddrome = True;

我将for循环条件更改为:

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

最后,我改变了if (isPalindrome = true)if (isPalindrome)

Mar*_*oun 5

if (isPalindrome = true)应该是if (isPalindrome == true)(或if (isPalindrome)更好!实际上这个错误是另一个很好的理由,为什么不询问someBoolean == true哪个是坏风格)

通过键入,if (isPalindrome = true)您再次true为变量赋值isPalindrome.由于您只是为其分配值,编译器会警告您未使用的变量.

知道这个也很好:

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

所以,当你这样做时if (isPalindrome = true),if条件总是满足.