2013-11-15 113 views
1

我试图做出会进入一个一年期限为他们的住房贷款是阻止用户控制30如果开关不能正常工作

HomeLoan hLoan=new HomeLoan(name, custID, loanID); 
System.out.println("You selected Home Loan"); 
System.out.println("Enter term: "); 
term=input.nextInt(); 
boolean l=false; 
boolean s = hLoan.termCorrect(term); 
System.out.println(s); 
if (s=true){ 
    System.out.println("Error: Maximum of 30 years");} 
else {l=false;} 

它调用termCorrect()确定的方法如果该术语超过30,并返回true或false。当我运行它时,s的值对于我使用的输入是正确的,但由于某种原因它总是运行错误消息,而不管s是什么。

任何帮助将不胜感激。

+0

始终显示的消息,因为你可以随时属性(s = true)的'true'值' –

回答

11

您正在使用赋值运算符=

if (s=true){ 

使用比较操作==代替:

if (s == true) { 

,或者因为它已经是一个boolean,用s本身:

if (s) 

最后一种形式更可取。它很简洁,没有机会与=混淆。

+7

+1,但可能强调'if(s)'比'if(s == true)'更好。 – yshavit

+0

谢谢!工作很好。 – user1873736

5

if语句中的赋值运算符无效。从

if (s=true){// this invalid 

更改为

if (s){ 
+0

或同样s ==真。 +1 – imulsion

+0

'if(s)'与'if(s == true)'相同' – Masudul

+0

如果“无效”表示“它不做你想要的”,那么这就是事实。如果通过“无效”,你的意思是“不编译”或“语法错误”,这将是一个不同的故事。 – MxyL

3

=是分配。 ==是平等比较。

+4

'大多数情况下评估为布尔真'否,只有'真'(如果包括autounboxing,则为真值'布尔'对象)。 '1',''true“','new MyTrueObject()'等都不会计算为true。 Java不会做弱打字。试试'if(1){}',你会发现它不能编译。 – yshavit

+0

哎呀,雅,我在想Ruby: – MxyL

+0

感谢编辑,带走了downvote。 :) – yshavit

2

您的if声明不正确。通过使用s=true,您在if内将s设置为true。 Java中的相等运算符是==。因此,你可以这样做:

if(s==true) 

或者,由于s==true是逻辑上等同于s(想想),你可以这样做:

if(s)