2013-10-01 16 views
15

Jestem całkiem nowy w Javie i używam BlueJ. Wciąż próbuję uzyskać błąd "Nie można odrzucić" podczas próby kompilacji i nie jestem pewien, na czym polega problem. Błąd występuje szczególnie w moim oświadczeniu na dole, gdzie "równy" jest błędem i "int nie może być zniesiony". Mam nadzieję, że otrzymam pomoc, ponieważ nie mam pojęcia, co robić. Z góry dziękuję!"int nie może być dereferenced" w Javie

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

Starasz się przy użyciu 'int' gdzie' Integer', '' Number' lub oczekuje Object' ... 'int 'nie ma żadnych metod. – MadProgrammer

Odpowiedz

14

id jest prymitywnego typu int a nie Object. Nie można wywołać metody na prymitywne jak robisz tutaj:

id.equals 

spróbować wymienić to:

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

z

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

Zakładając getItemNumber() zwraca int wymienić

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

z

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

2

Zasadniczo, starasz się używać int jakby to był Object, który nie jest (no ... to skomplikowane)

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

Powinien być ...

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

Jedna wątpliwość: == porównuje odniesienia dla obiektów i porównuje wartości dla prymitywów, prawda? Proszę poprawić, jeśli się mylę. –

+0

Tak. Prymitywy są wyjątkowe. – MadProgrammer

+0

Właściwie studiując interfejs, otrzymałem ten błąd i googlowanie doprowadziło mnie do tej odpowiedzi. Prosimy o sprawdzenie, czy potrafisz: 'error: int nie może być dereferencjonowany' 'System.out.println (" A = "+ A.AB);' Klasa, w której SOP jest wywoływany, implementuje jeden 'interfejs C'' i A jest super interfejsem C. int AB jest zdefiniowany w obu interfejsach. Błąd występuje przy "A.AB". –

0

Zmiana

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

do

id == list[pos].getItemNumber() 

Aby uzyskać więcej informacji, należy poznać różnicę między prymitywnych typów jak int, char i double i typów referencyjnych.

-1

spróbować

id == list[pos].getItemNumber() 

zamiast

id.equals(list[pos].getItemNumber() 
Powiązane problemy