Проблема с циклом foreach для коллекции

184
22 июня 2022, 16:50

Есть некоторая коллекция bookcase:

package BookManager;
import java.util.ArrayList;
import java.util.Scanner;
public class BookCase {
    ArrayList<Book> books;
BookCase() {
    books = new ArrayList<>();
}
void addBook(String bookName, String author) {
    Book book = new Book(bookName, author);
    books.add(book);
}
ArrayList<Book> showBooks() {
    System.out.println("Список книг: ");
    return books;
}
ArrayList<Book> findBook(String input) {
    ArrayList<Book> findBookList = new ArrayList<>();
    for (Book book : books) {
        if ((input.equals(book.name)) | (input.equals(book.writer))) {
            findBookList.add(book);
        }
    }
    return findBookList;
}
void showBookInfo(String input) {
    ArrayList<Book> showInfoBook = findBook(input);
    for (Book book : showInfoBook) {
        System.out.println("Название книги: " + book.name + " Писатель: " + book.writer);
    }
}
void delBook(String input) {
    for (Book book : books) {
        if ((input.equals(book.name)) | (input.equals(book.writer))) {
            books.remove(book);
            System.out.println("Книга удалена");
            break;
        } else {
                System.out.println("Нет такой книги.");
                break;
            }
        }
    }
}

Другой класс:

package BookManager;
import java.util.ArrayList;
import java.util.Scanner;
public class Menu {
    Scanner scanner;
    BookCase bookCase;
    public Menu(BookCase bookCase) {
        scanner = new Scanner(System.in);
        this.bookCase = bookCase;
    }
    void offerMenu() {
        int userInput;
        do {
            listOptions();
            System.out.println();
            System.out.println("Выберите опцию:");
            System.out.println();
            userInput = scanner.nextInt();
            scanner.nextLine();
            processing(userInput);
        }
        while (userInput() != 7);
        System.out.println("Работа завершена.");
    }
    
        int userInput() {
            int userInput;
    
            while (true) {
                if (scanner.hasNextInt()) {
                    userInput = scanner.nextInt();
                    scanner.nextLine();
                    break;
                } else {
                    scanner.nextLine();
    
                }
            }
            return userInput;
        }
    
        String inputBookTitleAuthor() {
            System.out.println("Введите автора/название: ");
            String userStringInput = scanner.nextLine();
            return userStringInput;
        }
    
        void listOptions() {
            System.out.println("Выберите опцию менеджера книг: ");
            System.out.println("1 -
 посмотреть список книг");
        System.out.println("2 - поиск книги");
        System.out.println("3 - информация по книге");
        System.out.println("4 - добавить книгу");
        System.out.println("5 - удалить книгу");
        System.out.println("0 - для выхода в основное меню");
        System.out.println("7 - выход");
    }

    private void processing(int userInput) {
        switch (userInput) {
            case 1:
                menuShowBooks();
                break;
            case 2:
                menuFindBook();
                break;
            case 3:
                bookInfo();
                break;
            case 4:
                menuAddBook();
                break;
            case 5:
                menuDelBook();
                break;
            case 0:
                break;
            case 7:
                return;
        }
    }
    void bookInfo() {
        System.out.println("Введите название/автора книги для поиска: ");
        String bookName = scanner.nextLine();
        bookCase.showBookInfo(bookName);
    }
    void menuFindBook() {
        System.out.println("Введите название/автора книги для поиска: ");
        String bookName = scanner.nextLine();
        System.out.println(bookCase.findBook(bookName));
    }
/**
 * Вопрос в работе метода ниже
 * метод выводит список книг в формате списка, т.е. в строку
 * [Автор 'пушкин', наименование книги: ' сказки'}, Автор 'непушкин', наименование книги: ' несказки'}, Автор 'гоголь', наименование книги: ' нос'}]
 */
void menuShowBooks() {
    for (BookCase book : bookCase ) {
        System.out.println(book);
    }
}
void menuAddBook() {
    System.out.println("Введите автора: ");
    String bookName = scanner.nextLine();
    System.out.println("Введите название:");
    String author = scanner.nextLine();
    bookCase.addBook(bookName, author);
    System.out.println("Добавлено в библиотЭку");
}

 void menuDelBook() {
        System.out.println("Введите название/автора книги для удаления: ");
        String bookName = scanner.nextLine();
        bookCase.delBook(bookName);
    }
}

Вопрос:

Каких и где строк не хватает, чтобы в методе menuShowBooks с помощью foreach вывести все объекты ПОСТРОЧНО Сейчас в данном методе bookcase подчеркнут красным, но что за ошибка я не понимаю. Точнее я догадываюсь, что это переменная НЕмассива, но как исправить пока не понимаю.

Answer 1

bookCase в вашем случае это экземпляр класса, у которого имеется переменная books.

for (Book book : bookCase.books) {
    System.out.println(book);
}
READ ALSO
Активация профиля application.properties в зависимости от среды запуска

Активация профиля application.properties в зависимости от среды запуска

Приложение разрабатывается и тестируется на хосте под Windows и должно запускаться в контейнере DockerСоответственно в Docker-compose запускается отдельный...

248
Cравнение строк

Cравнение строк

C клавиатуры вводится "Hello", по почему-то выдает false,хотя вроде бы строки равны

276
Разница между Chronometer и CountDownTimer

Разница между Chronometer и CountDownTimer

Создаю приложение, которое каждый день даёт заданияЗадание даётся раз в 24 часа

318
Как заполнить массив double через цикл for?

Как заполнить массив double через цикл for?

Для вывода трёхмерного пространства необходимо таким образом заполнить массив, вроде как лёгкое дело, но мне в районе x[i],y[j],z[i][j] выводит ошибку:

183