Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

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

No Answers yet.

Your answer might help someone💌