Error: int cannot be dereferenced

Discussione in 'Java' iniziata da LukeFerrari, 10 Gennaio 2015.

  1. LukeFerrari

    LukeFerrari Nuovo Utente

    Registrato:
    16 Gennaio 2014
    Messaggi:
    27
    Mi Piace Ricevuti:
    1
    Punteggio:
    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
     
    A ottofonsuppost piace questo elemento.
  2. Ansharja

    Ansharja Nuovo Utente

    Registrato:
    21 Novembre 2014
    Messaggi:
    3
    Mi Piace Ricevuti:
    1
    Punteggio:
    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.
     
    A ottofonsuppost piace questo elemento.
Sto caricando...

Condividi questa Pagina