2013-10-01 3 views
15

Я довольно новичок в Java, и я использую BlueJ. Я продолжаю получать эту ошибку «Int не может быть разыменован» при попытке скомпилировать, и я не уверен, в чем проблема. Ошибка происходит конкретно в моей инструкции if внизу, где она говорит, что «равно» является ошибкой, и «int не может быть разыменован». Надеюсь получить помощь, поскольку я понятия не имею, что делать. Заранее спасибо!«int не может быть разыменован» в 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

Вы пытаетесь с помощью 'int' где' Integer', '' Number' или Object', как ожидается, ... 'ИНТ 'не имеет методов – MadProgrammer

ответ

14

id является примитивного типа int, а не Object. Вы не можете вызывать методы примитивным, как вы делаете здесь:

id.equals 

Попробуйте заменить это:

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

с

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

Предполагая, что getItemNumber() возвращает int, замените

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

с

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

2

В принципе, вы пытаетесь использовать int, как если бы это был Object, что это не так (ну ... это сложно)

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

Должно быть ...

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

Одно сомнение: == сравнивает ссылку для объектов и сравнивает значения для примитивов, не так ли? Пожалуйста, исправьте, если я ошибаюсь. –

+0

Да. Примитивы особенные. – MadProgrammer

+0

На самом деле изучение интерфейса Я получил эту ошибку, и поисковик привел меня к этому ответу. Пожалуйста, посмотрите, если вы можете: 'error: int не может быть разыменован' ' System.out.println («A =» + A.AB); ' Класс, в котором SOP называется, реализует один интерфейс' и A - суперинтерфейс C. int AB определен в обоих интерфейсах. Ошибка происходит на 'A.AB'. –

0

Изменение

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

в

id == list[pos].getItemNumber() 

Для получения более подробной информации, вы должны понять разницу между примитивными типами как int, char и double и ссылочных типов.

-1

попробовать

id == list[pos].getItemNumber() 

вместо

id.equals(list[pos].getItemNumber() 
Смежные вопросы