2013-10-01 30 views
15

Sono abbastanza nuovo in Java e sto usando BlueJ. Continuo a ricevere questo errore "Int non può essere dereferenziato" durante il tentativo di compilazione e non sono sicuro di quale sia il problema. L'errore si verifica in modo specifico nella mia istruzione if in basso, dove si dice "equals" è un errore e "int non può essere dereferenziato". Spero di ricevere assistenza in quanto non ho idea di cosa fare. Grazie in anticipo!"int non può essere dereferenziato" in Java

public class Catalog { 
    private Item[] list; 
    private int size; 

    // Construct an empty catalog with the specified capacity. 
    public Catalog(int max) { 
     list = new Item[max]; 
     size = 0; 
    } 

    // Insert a new item into the catalog. 
    // Throw a CatalogFull exception if the catalog is full. 
    public void insert(Item obj) throws CatalogFull { 
     if (list.length == size) { 
      throw new CatalogFull(); 
     } 
     list[size] = obj; 
     ++size; 
    } 

    // Search the catalog for the item whose item number 
    // is the parameter id. Return the matching object 
    // if the search succeeds. Throw an ItemNotFound 
    // exception if the search fails. 
    public Item find(int id) throws ItemNotFound { 
     for (int pos = 0; pos < size; ++pos){ 
      if (id.equals(list[pos].getItemNumber())){ //Getting error on "equals" 
       return list[pos]; 
      } 
      else { 
       throw new ItemNotFound(); 
      } 
     } 
    } 
} 
+3

Stai cercando di utilizzare un 'int' in cui si prevede un' Integer', 'number' o' 'Object' ... int 'non ha metodi – MadProgrammer

risposta

14

id è di tipo primitivo int e non un Object. Non è possibile chiamare i metodi su un primitivo, come si sta facendo qui:

id.equals 

provare a sostituire questo:

 if (id.equals(list[pos].getItemNumber())){ //Getting error on "equals" 

con

 if (id == list[pos].getItemNumber()){ //Getting error on "equals" 
0

Supponendo getItemNumber() restituisce un int, sostituire

if (id.equals(list[pos].getItemNumber()))

con

if (id == list[pos].getItemNumber())

2

In sostanza, si sta cercando di usare int come se fosse un Object, che non è (beh ... è complicato)

id.equals(list[pos].getItemNumber()) 

Dovrebbe essere ...

id == list[pos].getItemNumber() 
+0

Un dubbio: == confronta il riferimento per gli oggetti e confronta i valori per le primitive, giusto? Si prega di correggere se ho torto. –

+0

Sì. I primitivi sono speciali. – MadProgrammer

+0

Studendo effettivamente l'interfaccia ho ricevuto questo errore e ho cercato su Google questa risposta. Guarda se puoi: 'errore: int non può essere dereferenziato' ' System.out.println ("A =" + A.AB); ' La classe in cui SOP è chiamata implementa una' interfaccia C' e A è una super interfaccia di C. int AB è definita in entrambe le interfacce. Errore a 'A.AB'. –

0

Modifica

id.equals(list[pos].getItemNumber()) 

a

id == list[pos].getItemNumber() 

Per maggiori dettagli, si dovrebbe imparare la differenza tra i tipi primitivi come int, char e double e tipi di riferimento.

-1

provare

id == list[pos].getItemNumber() 

invece di

id.equals(list[pos].getItemNumber() 
Problemi correlati