Error: int cannot be dereferenced

LukeFerrari

Nuovo Utente
16 Gen 2014
27
1
0
Ho un problema con un programmino che sto facendo per stabilire se un anno è bisestile, ovvero se è divisibile per 4, ad eccezione degli anni divisibili per 100 (tranne i numeri divisibili per 400); tali eccezioni non valgono nel caso in cui l'anno sia inferiore o uguale a 1582 (anno di introduzione del calendario gregoriano). Il codice è il seguente:

Codice:
import java.util.Scanner;
public class LeapYearTester2
{
    public static void main(String[] args)
    {
        System.out.println("Inserire un anno. \n");
        Scanner in = new Scanner(System.in);
        int anno = in.nextInt();
        in.close();


        if (anno <= 0)
            System.out.println("\nL'anno deve essere un numero positivo e maggiore di 0.");
        else
            if (anno % 4 == 0)
            {
                if (anno.isEccez() == false)
                    System.out.println("\nL'anno " + anno + " è bisestile.");
                else
                    System.out.println("\nL'anno " + anno + " non è bisestile.");
            }
            else
                System.out.println("\nL'anno " + anno + " non è bisestile.");
    }


    public boolean isEccez(int anno)
    {
        if (anno > 1582)
        {
            if (anno % 100 == 0)
            {
                if (anno % 400 == 0)
                    return false;
                else
                    return true;
            }
            else
                return false;
        }
        else
            return false;
    }
}
Questo è l'errore che visualizzo quando cerco di compilare è

Codice:
	LeapYearTester2.java:17: error: int cannot be dereferenced
                       if (anno.isEccez() == false)
Grazie in anticipo a tutti quelli che mi risponderanno
 
  • Like
Reactions: ottofonsuppost

Ansharja

Nuovo Utente
21 Nov 2014
3
1
0
Doppia Soluzione

Ciao LukeFerrari non sono un utente esperto ma provo a risponderti lo stesso ^^.

Intanto provo a darti due consigli generali che trovo utili:
1- Non usare nomi di classi molto lunghi,se devi istanziare oggetti come farò nella prima soluzione scrivi codice per nulla
2- Dentro la clausola if invece di scrivere if(condizione==true) o if(condizione==false) è sufficente scrivere if(condizione) o if(!condizione) , perchè entri nel ciclo if se tra parentesi hai un booleano che vale true. Quindi la condizione if(anno.isEccez() == false) è un pò come scrivere if(false==false),puoi semplificare scrivendo solo
if(!anno.isEccez()).

Per quanto riguarda l'errore che ricevi in fase di compilazione , il tuo errore è che stai cercando di applicare un metodo della classe LeapYearTester2 a un oggetto di tipo int invece di passare l'intero anno al metodo dentro la parentesi.

Soluzione 1:istanziare un oggetto della classe LeapYearTester2 e applicare il metodo isEccez su di esso:

LeapYearTester2 scegliNome=new LeapYearTester2(); //costruttore di base perchè non ne hai dichiarati.

E poi nel ciclo sostituisci la riga 17 con if(scegliNome.isEccez(anno) == false) (meglio se abbrevi come scrivo sopra)

Soluzione 2:dichiarare il metodo isEccez(int anno) come metodo di classe,in questo modo devi solo usare il metodo senza istanziare un oggetto della classe LeapYearTester2:

public static boolean isEccez(int anno) al posto di public boolean isEccez(int anno) nella dichiarazione del metodo,nella riga 17 scriverai if(isEccez(anno) == false) cioè non applichi il metodo a nessun oggetto.

Tieni presente che un metodo statico va un po' contro alla logica di java (io me ne frego e lo faccio lo stesso ^^),cioè non potrai usarlo su oggetti istanziati.
 
  • Like
Reactions: ottofonsuppost