Boolean始终输出true

时间:2014-07-17 00:10:13

标签: java loops if-statement boolean

我有一堂课来测试回文。在我的循环中,它比较每个字母以查看它们是否匹配,如果它们不是,它应该将布尔变量设为false,反之亦然。现在我已经测试了它,我可以看到,如果我正确地放入回文,它实际上会转到正确的if语句,这使得变量为真。如果遇到一对不匹配的字母,它应该将布尔变量声明为false并从循环中断,它实际上正确地执行。但无论如何,当我尝试使用它来确定响应的回复时,布尔变量总是为真,我不明白为什么。

 is a palindrome!  Hooray!

始终是输出,即使循环变为false boolean并且断开,也让我感到困惑。

public class Palindrome
{
public static void main(String[] args) 
{
    //is it true?
    boolean truth;
    //create stack and queue
    Stack s = new Stack();
    Queue q = new LinkedList();
    //scanner
    Scanner input = new Scanner(System.in);
    //get string
    System.out.println("Enter a palindrome, or don't, I'll know:");
    String palin = input.nextLine();
    //remove whitespace
    palin = palin.replaceAll("\\s+","");
    System.out.println(palin);
    //remove puncuation
    palin = palin.replaceAll("\\p{P}", "");
    System.out.println(palin);
    //set lowercase
    palin = palin.toLowerCase();
    System.out.println(palin);

    //feed string to stack and queue
    for(int i = 0; i < palin.length(); i++)
    {
        s.push(palin.charAt(i));
        q.add(palin.charAt(i));
    }
    System.out.println(s);
    System.out.println(q);
    while(!s.isEmpty() && !q.isEmpty())
    {
        Object sTemp = s.pop();
        Object qTemp = q.poll();
        String sString = sTemp.toString();
        String qString = qTemp.toString();
        System.out.println(sString + qString);
        System.out.println("looptest");
        if(sString.equals(qString))
        {
            truth = true;
        }
        else
        {
            truth = false;
            break;
        }
    }
    if(truth = true)
    {
        System.out.println(palin + " is a palindrome!  Hooray!");
    }
    else
    {
        System.out.println(palin + " is no palindrome! You lied!");
    }
}
}

2 个答案:

答案 0 :(得分:7)

使用此行

if(truth = true)

当您想要true进行比较时,您正在使用truth=分配给==。它已经是boolean,所以只需将它作为条件。

if (truth)

答案 1 :(得分:-1)

基本,但大多数程序员(初学者)倾向于错字或只是不知道的差异 ===或正式与他们会面,所以在这里

=是赋值运算符和 ==测试相等或条件运算符

所以在你的行

 if(truth = true)
    {
       ...
    }

您要将变量truth指定为true作为值

必须使用布尔值的== so值不会改变。

if(truth == true)
    {
      ...
    }

if(truth.equals(true))
    {
       ...
    }