ошибка «не могу понять»: указывает на незаконное начало выражения (логические операторы)

#java

#java

Вопрос:

Вот всплывающая ошибка:

 Riccio_Lesson5.java:88: error: illegal start of expression
        }else if(bmi == 18.5 amp; <= 24.9){
                               ^
Riccio_Lesson5.java:91: error: illegal start of expression
        }else if(bmi == 25.0 amp; <= 29.9){
                               ^
  

Вот код для этого:

 if(bmi < 18.5){
    System.out.print(", indicating your weight is in thenUnderweight category for adults of your height.");
    System.out.print("nnTalk with your healthcare provider to determine possible causes of underweight and if you need to gain weight.");
}else if(bmi == 18.5 amp; <= 24.9){
    System.out.print(", indicating your weight is in the nNormal category for adults of your height.");
}else if(bmi == 25.0 amp; <= 29.9){
    System.out.print(", indicating your weight is in the Overweight category for adults of your height.");
}else if(bmi >= 30.0){
    System.out.print(", indicating your weight is in the Obese category for adults of your height.");
}
  

Я пытаюсь сказать, что если имт равен 18,5 или меньше или равен 24,9, ваш ИМТ будет отображаться как нормальный / если ваш ИМТ равен 25 или меньше / равен 29,9, у вас избыточный вес.

Комментарии:

1. Вам нужны два сравнения с логическим, а не побитовым, и.

2. что bmi == 25.0 amp; <= 29.9 следует проверить? может быть, вы хотите bmi >= 25.0 amp;amp; bmi <= 29.9

3. И вам нужно не равно, а больше, чем равно. Хотя, если диапазоны являются смежными, в этом также не будет необходимости. Учебное пособие по Java может быть хорошей идеей.

4. Кстати, что, если bmi равен 29,95?

5. Итак, если я использую оператор amp;amp;, должен ли я тогда изменить == на >= (больше или равно 18,5), чтобы он выполнял оба условия?

Ответ №1:

Вы не можете оставить левую часть выражения сравнения в Java, как мы сделали бы на естественном языке; это всегда должно быть явным. «ИМТ больше или равен 18,5 и меньше или равен 24,9» должен переводиться в:

 bmi >= 18.5 amp;amp; bmi <= 24.9
  

Обратите внимание, что я использовал >= для перехвата значений, больших или равных 18,5. Я также использовал amp;amp; , который обычно используется для логических союзов из-за его поведения короткого замыкания, хотя amp; он отлично работает для логических операций.

Вы также можете захотеть использовать bmi < 25.0 вместо bmi <= 24.9 , потому что ваше следующее else if условие начинается с (или будет начинаться с) bmi >= 25.0 , и вы захотите перехватить такие значения, как 24.95, которые не будут перехватываться вашей текущей логикой.

Аналогичные изменения необходимы для следующего else if условия.