equal()メソッドをオーバーライドして使いたいのに、エラーが出てしまいます。
Q&A
解決したいこと
equal()メソッドをオーバーライドして使いたいのに、エラーが出てしまいます。
解決方法を教えて下さい。
発生している問題・エラー
クラスBookShelfの34行目
ここでは、同じ本は登録できないように、equal()メソッドの定義をしています。
定義内容はBookクラスでのname ,auther が同じであれば、同一の本とみなします。
そのためのequal()メソッドを定義しようとしています。
getNameは解決できないか、フィールドではありません。
または、問題・エラーが起きている画像をここにドラッグアンドドロップ
該当するソースコード 訂正後クラスBook
package lesson14_4;
public class Book {
private String name;
private int price;
private String auther;
public Book(String name,int price,String auther) {
this.name = name;
this.price = price;
this.auther = auther;
}
public String getName() {
return name;
}
public int getPrice() {
return price;
}
public String getAuther() {
return auther;
}
public void setName(String name) {
this.name = name;
}
public void setPrice(int price) {
this.price = price;
}
public void setAuther(String auther) {
this.auther = auther;
}
public boolean equal(Object o) {
if(o instanceof Book) {
Book b = (Book)o;
if(this.name.equals(b.name) && this.auther.equals(b.auther)) {
return true;
}
}return false;
}
}
該当するソースコード 訂正後 クラスBookShelf
package lesson14_4;
public class BookShelf {
Book[] books ;
int numbers;
public BookShelf(Book[] books, int numbers) {
super();
this.books = books;
this.numbers = numbers;
}
public Book[] getBooks() {
return books;
}
public void setBooks(Book[] books) {
this.books = books;
}
public int getNumbers() {
return numbers;
}
public void setNumbers(int numbers) {
this.numbers = numbers;
}
}
該当するソースコード 訂正前 クラスBook
package lesson14_4;
public class Book {
private String name;
private int price;
private String auther;
public Book(String name,int price,String auther) {
this.name = name;
this.price = price;
this.auther = auther;
}
public String getName() {
return name;
}
public int getPrice() {
return price;
}
public String getAuther() {
return auther;
}
public void setName(String name) {
this.name = name;
}
public void setPrice(int price) {
this.price = price;
}
public void setAuther(String auther) {
this.auther = auther;
}
}
該当するソースコード 訂正前BookShelf
package lesson14_4;
public class BookShelf {
Book[] books ;
int numbers;
public BookShelf(Book[] books, int numbers) {
super();
this.books = books;
this.numbers = numbers;
}
public Book[] getBooks() {
return books;
}
public void setBooks(Book[] books) {
this.books = books;
}
public int getNumbers() {
return numbers;
}
public void setNumbers(int numbers) {
this.numbers = numbers;
}
public boolean equal(Object o) {
if(this==o) {
return true;
}
if(o instanceof Book) {
Book b = (Book)o;
if(this.getName().equal(b.getName()) && this.getAuther().equal(b.getAuther())) { { //34行目
return true;
}
}
}
}
該当するソースコード クラスMain
package lesson14_4;
import java.util.Scanner;
public class Main {//1
public static void main(String[] args) {//2
Scanner scanner = new Scanner(System.in);
Book[] bookshelf = new Book[3];
System.out.println("現在所持している本一覧========");
for(int i = 0 ; i < bookshelf.length ; i ++) {
System.out.println("書名:" + bookshelf[i].getName()+ "/");
System.out.println("価格:" + bookshelf[i].getPrice()+ "円/");
System.out.println("著者名:" + bookshelf[i].getAuther()+ "/");
}
if(bookshelf[2]==null) {
System.out.println("所有している本はありません");
}
boolean flag= true;
int i=0;
while(flag) {
System.out.println("===========================\n新しい書籍を追加しますか?[はい: yes いいえ: no]");
String a = scanner.nextLine();
if(a=="no") {
break;
}
System.out.println("新しい本を追加します。");
System.out.println("書籍名を入力してください。");
String b = scanner.nextLine();
bookshelf[i].setName(b);
System.out.println("価格を入力してください。");
int c = scanner.nextInt();
bookshelf[i].setPrice(c);
System.out.println("著者名を入力してください。");
String d = scanner.nextLine();
bookshelf[i].setAuther(d);
for(int n=0; n < i; n++) {
if(bookshelf[i].equals(bookshelf[n])) {
System.out.println("同じ書籍があるので、追加されませんでした。");
scanner.nextLine();//handle end of line
bookshelf[i]=null;
}
}
System.out.println("繰り返し、書籍を追加しますか?[はい: yes いいえ: no]");
String e = scanner.nextLine();
if(e=="no") {
break;
}
if(i>5) {
break;
}
scanner.close();
}
}
}
自分で試したこと
ここに問題・エラーに対して試したことを記載してください。
初めは、
インスタンスbに対して、b.nameとしていましたが、b.getName()としてゲッターを使うようにしましたが、エラーが一向に消えません。
0