私はJavaとBlueJを使っています。コンパイルしようとすると、この「Intを逆参照できません」というエラーが出続け、問題が何なのかわかりません。一番下のifステートメントでエラーが具体的に発生しています。「等しい」はエラーであり、「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();
}
}
}
}
id
はプリミティブ型int
であり、Object
ではありません。ここで行っているように、プリミティブでメソッドを呼び出すことはできません。
id.equals
これを置き換えてみてください:
if (id.equals(list[pos].getItemNumber())){ //Getting error on "equals"
と
if (id == list[pos].getItemNumber()){ //Getting error on "equals"
基本的に、あなたはint
であるかのようにObject
を使用しようとしていますが、そうではありません(まあ...複雑です)
id.equals(list[pos].getItemNumber())
あるべき...
id == list[pos].getItemNumber()
getItemNumber()
がint
を返すと仮定して、置換
if (id.equals(list[pos].getItemNumber()))
と
if (id == list[pos].getItemNumber())
変化する
id.equals(list[pos].getItemNumber())
に
id == list[pos].getItemNumber()
詳細については、int
、char
、double
などのプリミティブ型と参照型の違いを学習する必要があります。
メソッドはintデータ型なので、equals()の代わりに「==」を使用する必要があります
if(id.equals(list [pos] .getItemNumber()))を置き換えてみてください
と
if (id.equals==list[pos].getItemNumber())
エラーが修正されます。