我是Java的新手,我正在使用BlueJ。我在尝试编译时不断得到“Int not be dereferenced”错误,我不确定问题是什么。错误特别发生在我底部的if语句中,其中“equals”是一个错误,“int不能被解除引用”。希望得到一些帮助,因为我不知道该怎么做。提前谢谢!
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();
}
}
}
}
答案 0 :(得分:18)
id
是原始类型int
而不是Object
。你不能像在这里那样调用基元上的方法:
id.equals
尝试替换它:
if (id.equals(list[pos].getItemNumber())){ //Getting error on "equals"
与
if (id == list[pos].getItemNumber()){ //Getting error on "equals"
答案 1 :(得分:4)
基本上,您尝试使用int
,就像它是Object
一样,它不是(嗯......它很复杂)
id.equals(list[pos].getItemNumber())
应该......
id == list[pos].getItemNumber()
答案 2 :(得分:0)
假设getItemNumber()
返回int
,请替换
if (id.equals(list[pos].getItemNumber()))
带
if (id == list[pos].getItemNumber())
答案 3 :(得分:0)
更改
id.equals(list[pos].getItemNumber())
到
id == list[pos].getItemNumber()
有关详细信息,您应该了解基本类型之间的区别,例如int
,char
和double
以及引用类型。
答案 4 :(得分:0)
由于方法是int数据类型,因此应使用“ ==”而不是equals()
尝试替换此 如果(id.equals(list [pos] .getItemNumber()))
使用
if (id.equals==list[pos].getItemNumber())
它将纠正错误。
答案 5 :(得分:-1)
尝试
id == list[pos].getItemNumber()
而不是
id.equals(list[pos].getItemNumber()