2013-10-01 14 views
15

Tôi là khá mới với Java và tôi đang sử dụng BlueJ. Tôi tiếp tục nhận được lỗi "Int không thể được dereferenced" khi cố gắng biên dịch và tôi không chắc chắn vấn đề là gì. Lỗi này xảy ra cụ thể trong câu lệnh if của tôi ở dưới cùng, trong đó có thông báo "bằng" là lỗi và "int không thể bị hủy tham chiếu". Hy vọng sẽ nhận được một số trợ giúp vì tôi không biết phải làm gì. Cảm ơn bạn trước!"int không thể được dereferenced" trong 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

Bạn đang cố gắng sử dụng một 'int' nơi một' Integer', 'Number' hoặc' Object' dự kiến ​​... 'int 'không có bất kỳ phương thức nào – MadProgrammer

Trả lời

14

id là loại nguyên thủy int và không phải là một Object. Bạn không thể gọi phương pháp trên một nguyên thủy như bạn đang làm gì ở đây:

id.equals 

Hãy thử thay thế này:

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

với

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

Giả sử getItemNumber() trả về một int, thay thế

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

với

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

2

Về cơ bản, bạn đang cố gắng sử dụng int như thể nó là một Object, mà nó không phải là (cũng ... đó là phức tạp)

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

Nên là ...

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

Một nghi ngờ: == so sánh tham chiếu cho các đối tượng và so sánh các giá trị cho nguyên thủy, phải không? Vui lòng sửa nếu tôi sai. –

+0

Có. Nguyên thủy là đặc biệt. – MadProgrammer

+0

Trên thực tế giao diện học tập tôi nhận được lỗi này và googling đưa tôi đến câu trả lời này. Vui lòng xem liệu bạn có thể: 'lỗi: int không thể bị hủy tham chiếu ' ' System.out.println ("A =" + A.AB); ' Lớp trong đó SOP được gọi là thực hiện một giao diện' ' và A là giao diện siêu của C. int AB được định nghĩa trong cả hai giao diện. Lỗi xảy ra tại 'A.AB'. –

0

Thay đổi

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

để

id == list[pos].getItemNumber() 

Để biết thêm chi tiết, bạn nên tìm hiểu sự khác biệt giữa các loại nguyên thủy như int, char, và double và các loại tài liệu tham khảo.

-1

thử

id == list[pos].getItemNumber() 

thay vì

id.equals(list[pos].getItemNumber() 
Các vấn đề liên quan