我有一堂课来测试回文。在我的循环中,它比较每个字母以查看它们是否匹配,如果它们不是,它应该将布尔变量设为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!");
}
}
}
答案 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))
{
...
}