2013-11-15 3 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

сообщение всегда отображается, поскольку вы всегда можете приписать значение true для 's'' (s = 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 == true. +1 – imulsion

+0

'if (s)' равно как 'if (s == true)' – Masudul

+0

Если «недопустимый» означает «он не делает то, что вы хотите», тогда это будет правда. Если «недопустимый» означает «не скомпилировать» или «синтаксическую ошибку», это будет другая история. – MxyL

3

= это назначение. == - сравнение равенства.

+4

'большинство вещей оценивается до логического истины' Нет, только' true' делает (и истинно-значные 'Boolean' объекты, если вы включаете autounboxing). '1',' "true", 'new MyTrueObject()' и т. Д. Все не оцениваются как 'true'. Java не делает слабую типизацию. Попробуйте 'if (1) {}', и вы увидите, что он не компилируется. – yshavit

+0

К сожалению, я думал, что Ruby – MxyL

+0

Спасибо за редактирование, забрал нижний план. :) – yshavit

2

Ваше заявление if неверно. Используя s=true, вы устанавливаете s в значение true внутри if. Оператор равенства в Java равен ==. Таким образом, вы можете сделать это:

if(s==true) 

Или, так как s==true логически эквивалентно s (думать об этом), вы можете сделать это:

if(s) 
Смежные вопросы