2015-07-20 5 views
0

Что случилось с моим кодом? Ошибка «неожиданный тип». Это if (year % 4.0 = 2.0) часть и сообщение об ошибке(начинающий) непредвиденный тип ошибки

assignment4part2.java:18: error: unexpected type 
       if (year/4.0 = 0.0) 
        ^
    required: variable 
    found: value 

Код выглядит следующим образом:

import java.util.Scanner; 

public class assignment4part2 { 

    public static void main(String[] args) { 

     Scanner input = new Scanner(System.in); 
     System.out.println("Enter a number of a month"); 
     double month = input.nextDouble(); 
     System.out.println("Enter a year"); 
     double year = input.nextDouble(); 
     if (month == 1.0) { 
      System.out.println("January " + year + " had 31 days."); 
     } else if (month == 2.0) { 
      if (year % 4.0 = 0.0) { 
       System.out.println("February " + year + "had 29 days."); 
      } else { 
       System.out.println("February " + year + "had 28 days."); 
      } 
     } else if (month == 3.0) { 
      System.out.println("March"); 
     } 
    } 
} 
+2

'==' вместо '=' –

+0

спасибо! который работал –

+0

Также, как FYI. Видовой год происходит при следующем условии: if (((месяц% 4 == 0) && (месяц% 100! = 0)) || (месяц% 400 == 0)) {' –

ответ

2

Как сказал @Maxime, вам нужно == вместо =. Это связано с тем, что компилятор ожидает логическое значение внутри оператора if, а оператор = возвращает значение, которое находится справа. (В этом случае - двойной).

Еще несколько комментариев, связанных с вашим кодом, но не вопрос:

  1. Будьте осторожны при использовании == с двойными типами. Как правило, это считается гораздо лучше практики, чтобы использовать EPSILON вместо проверки равенства при работе с числами с плавающей точкой:

    if (year % 4.0 == 0.0)

    Должно быть:

    if (Math.abs(year % 4.0 - 0.0) < EPSILON), где EPSILON очень маленький двойной значение, которое указывает, как близко year % 4.0 должно соответствовать 0.0. В этом случае явно избыточно вычитать 0.0, но использование его в этом примере помогает иллюстрировать шаблон.

  2. Использование оператора % с номерами с плавающей точкой может дать неожиданные результаты из-за ошибок округления и сохранения чисел с плавающей точкой. Если вам нужен оператор %, попробуйте вместо этого использовать какой-то тип целых чисел. Из вашего опубликованного кода кажется вам вполне подходящим использовать int или long вместо double. (Вы можете узнать больше о двухместных номерах и %here).

  3. Кажется, что вы используете несколько операторов if else один за другим. Существует конструкция, предназначенная специально для типа потока управления, к которому вы стремитесь достичь, называется оператором switch. (Вы можете узнать больше о switch заявлениях here). Опять же, будьте осторожны с помощью операторов switch с переменными с плавающей запятой.

  4. Наконец, в будущем это поможет людям предоставить более качественные ответы, если вы помечаете свой вопрос языком, который используете. (В данном случае Java).

Смежные вопросы