Zaimplementowałem określoną metodę wyszukiwania książki odpowiadającej danemu numerowi ISBN i zwracania tej książki. Ale użyłem typu zwracanego jako void w tej metodzie (metoda searchBook), ponieważ nie mogę dowiedzieć się, jak zwrócić „Książkę”. Jak więc zwrócić tę książkę zamiast ją wydrukować?

public class User {
    int ID;
    String name;
    String email;
    int age;
    String isbn;

    public User(int ID,String name,int age){
        this.ID = ID;
        this.name = name;
        this.age = age;
    }

    public static void searchBook(Book[] b, String isbn) {
        int found = 0;
        for (int i = 0; i < 6; i++) {
            if (b[i].ISBN == isbn) {
                found = 1;
                System.out.println(b[i].title);
                break;
            }
        }
        if (found == 0) {
            System.out.println("ISBN Not Found");
        }
    }
}

public class Book {
    String title;
    String author;
    String ISBN;
    float rating;
    int noOfDays;

    public  static void displayBookDetails(Book[] b){   
        System.out.println("Title\t\t\t\tAuthor\t\tISBN\t\tRating");
        for(int i=0;i<b.length;i++)
        {
            System.out.println(b[i].title+"\t\t\t"+b[i].author+"\t"+b[i].ISBN +"\t"+b[i].rating);
        }
    }

    //book constructor
    public Book(String title,String author ,String ISBN,float rating){
        this.title = title;
        this.author = author;
        this.ISBN = ISBN;
        this.rating = rating;
    }
}
-2
Allen Hay 5 styczeń 2022, 07:54
4
return b[i]; ?
 – 
John3136
5 styczeń 2022, 07:59
Pomyślałem, że mogę podać typ zwracany jako Book[] i return b . Dziękuję za podpowiedź.
 – 
Allen Hay
5 styczeń 2022, 08:17

3 odpowiedzi

Najlepsza odpowiedź

Po prostu zwróć obiekt Book po znalezieniu książki. I jest błąd. Wartość ciągu należy porównać metodą equals.

    public static Book searchBook(Book[] books, String isbn) {
        for (Book book : books) {
            if (book.ISBN.equals(isbn)) {
                return book;
            }
        }
        // or throw new RuntimeException("Not Found Book matching isbn");
        return null;
    }
0
Junhyunny 5 styczeń 2022, 08:21
Dobry ! Dziękuję
 – 
Allen Hay
5 styczeń 2022, 09:40

Oto przykład, w jaki sposób można zwrócić obiekt z metody.

Aby porównać obiekty, w tym ciągi, musisz użyć równości zamiast operatora ==. Operator == działa tylko na wartościach pierwotnych.

class Book {
    String title;
    Book(String title){ this.title = title; }
}

class Main{
    
    static Book find(Book[] books, String title){
        for(int i=0; i<books.length; i++)
            if (books[i].title.equals(title)){
                return books[i];
        return null;
    }
    
    public static void main(String[] args) {
        Book[] books = {new Book("A"), new Book("B"), new Book("C")};
        Book b = find(books, "B");
        System.out.println(b.title);
    }
}
0
Cheng Thao 5 styczeń 2022, 08:21

Zadeklaruj, że metoda searchBook zwraca Book (zamiast void) i dodaj dwie instrukcje return: jedną, jeśli Book zostanie znaleziony, a drugą, jeśli nie.

/**
 * Returns the book having the supplied ISBN in array 'b' or null if
 * no book in 'b' has the given ISBN.
 *
 * @param b - array of books to search.
 * @param isbn - ISBN to search for in 'b'.
 *
 * @return  Book with given ISBN or null if nothing found.
 */
public static Book searchBook(Book[] b, String isbn) {
    for (int i = 0; i < 6; i++) {
        if (b[i].ISBN.equals(isbn)) {
            return b[i];
        }
    }
    return null;
}

Jeśli używasz co najmniej Javy 8, możesz użyć strumienia API

public static java.util.Optional<Book> searchBook(Book[] b, String isbn) {
    return java.util.Arrays.stream(b)
                           .filter(book -> isbn.equals(book.ISBN))
                           .findFirst();
}

Zapoznaj się z artykułem Jak porównywać ciągi znaków w Javie, aby dowiedzieć się, jak testować czy dwa ciągi są równe.

0
Abra 5 styczeń 2022, 08:32