Ce este în neregulă cu codul meu? Eroarea este „tip neașteptat”. Este vorba de if (year % 4.0 = 2.0)
iar mesajul de eroare este
assignment4part2.java:18: error: unexpected type
if (year / 4.0 = 0.0)
^
required: variable
found: value
Codul este următorul:
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");
}
}
}
Așa cum a spus @Maxime, aveți nevoie de ==
în loc de =
.asta pentru că compilatorul se așteaptă la o valoare booleană în interiorul unui if
iar expresia =
returnează valoarea care se află în dreapta sa. (În acest caz, un dublu).
Încă câteva comentarii legate de codul dvs., dar nu și de întrebare:
-
Aveți grijă când utilizați
==
cu tipuri duble. În general, se consideră că este o practică mult mai bună să folosiți un operatorEPSILON
în loc să verificați egalitatea atunci când lucrați cu numere cu virgulă mobilă:if (year % 4.0 == 0.0)
Ar trebui să fie:
if (Math.abs(year % 4.0 - 0.0) < EPSILON )
, , undeEPSILON
este o valoare dublă foarte mică care specifică cât de aproape este deyear % 4.0
trebuie să fie egală cu0.0
. În acest caz, este în mod clar redundant să se scadă0.0
, , dar utilizarea acesteia în exemplu ajută la ilustrarea modelului. -
Folosind
%
cu numere cu virgulă mobilă poate da rezultate neașteptate din cauza erorilor de rotunjire și a modului în care sunt stocate numerele cu virgulă mobilă. Dacă aveți nevoie de operatorul%
operator, luați în considerare posibilitatea de a utiliza în schimb un alt tip de număr întreg. Din codul postat de dvs., se pare că este perfect adecvat să folosițiint
saulong
în loc dedouble
. (Puteți citi mai multe despre duble și%
aici). -
Se pare că folosiți mai multe
if else
una după alta. Există o construcție destinată special pentru tipul de flux de control pe care doriți să îl obțineți, numităswitch
declarație. (Puteți citi mai multe despreswitch
declarații aici). Din nou, aveți grijă la utilizarea instrucțiunilor switch cu variabile cu virgulă mobilă. -
În cele din urmă, în viitor, îi va ajuta pe oameni să ofere răspunsuri mai bune dacă vă etichetați întrebarea cu limbajul pe care îl utilizați. (În acest caz, Java).
if (((month % 4 == 0) && (month % 100 != 0)) || (month % 400 == 0)){
– > Por Timothy Murphy.