(Începător) eroare de tip neașteptată (Programare, Java, Bucle)

John Lee a intrebat.

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");
        }
    }
}

Comentarii

  • De asemenea, ca un FYI. Un an bisect are loc în următoarele condiții if (((month % 4 == 0) && (month % 100 != 0)) || (month % 400 == 0)){ –  > Por Timothy Murphy.
1 răspunsuri
Matt Martin

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:

  1. 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 operator EPSILON î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 ), , unde EPSILON este o valoare dublă foarte mică care specifică cât de aproape este de year % 4.0 trebuie să fie egală cu 0.0. În acest caz, este în mod clar redundant să se scadă 0.0, , dar utilizarea acesteia în exemplu ajută la ilustrarea modelului.

  2. 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ți int sau long în loc de double. (Puteți citi mai multe despre duble și % aici).

  3. 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 despre switch declarații aici). Din nou, aveți grijă la utilizarea instrucțiunilor switch cu variabile cu virgulă mobilă.

  4. Î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).

Tags:,