#java #arraylist #iteration
#java #ArrayList #Итерация
Вопрос:
У меня есть класс с именем Book:
public class Book {
private String title;
private boolean borrowed;
public Book(String bookTitle) {
// Store name of book and mark as not borrowed
title = bookTitle;
borrowed = false;
}
public void borrowed(){
// Set borrowed to true
borrowed = true;
}
public void returned() {
// Set borrowed to false
borrowed = false;
}
public boolean isBorrowed() {
// Return borrowed
return borrowed;
}
public String getTitle() {
// return title;
return title;
}
}
И класс, называемый Library:
public class Library {
private String address;
private ArrayList<Book> books = new ArrayList<Book>();
public Library(String Address) {
address = Address;
}
private void addBook(Book book) {
books.add(book);
}
private void borrowBook(String title) {
boolean bookFound = false;
// Find Book
}
Мне нужно выполнить метод borrowBook, который будет выполнять поиск по списку массивов, чтобы определить, есть ли книга в библиотеке или нет, а затем использовать метод borrowed() класса book, чтобы пометить книгу как арендованную.
Пока у меня есть что-то вроде этого, хотя я пытаюсь понять, как вызвать заимствованный метод или метод getTitle, чтобы иметь возможность работать с конкретным объектом book, содержащимся в списке массива
for (int i = 0; i < books.size(); i ) {
if (books[i].getTitle() = title) {
books[i].borrowed();
}
}
Комментарии:
1. Используйте закрытый список<Book> books = новый ArrayList<Book>();
Ответ №1:
Прежде всего, ваш if
оператор проверки неверен, т. Е. if (books[i].getTitle() = title)
должен быть заменен на,
if(books.get(i).getTitle().equals(title))
и не забудьте проверить borrowed
флаг перед вызовом borrowed()
функции.
Итак, ваш окончательный код должен выглядеть так,
for (int i = 0; i < books.size(); i )
{
if (books.get(i).getTitle().equals(title))
{
if(!books.get(i).isBorrowed())
books.get(i).borrowed();
else
{
//Inform user book already borrowed
}
break;
}
}
Комментарии:
1. Спасибо!! Работает отлично 🙂
Ответ №2:
Ваша логическая проверка должна быть
books[i].getTitle().equals(title)
или, скажем
title.equals(books[i].getTitle())
.
Вы неправильно сравниваете две строки.
Также рассмотрим случай, когда один или оба из них являются null
.
Ответ №3:
for (int i = 0; i < books.size(); i ) {
if (books.get(i).getTitle().equals(title)) {
books.get(i).borrowed();
}
}
Проблема с проверкой if (присвоением)
if (books[i].getTitle() = title)
должно быть заменено на (сравнение)
if (books.get(i).getTitle().equals(title))
Чтобы сделать его лучше
private void borrowBook(String title) {
boolean bookFound = false;
// Find Book
for(Book book : books)
{
if (book.getTitle().equals(title))
{
bookFound = true;
book.borrowed();
break;
}
}
//...More stuffs you may want to do
}
Ответ №4:
То, что у вас до сих пор не работает, элементы ArrayList не могут быть доступны с помощью обератора индекса []
. Вам нужно использовать список #get(индекс) списка. также для сравнения строк вы используете оператор equal , это неверно, он сравнивает только ссылки, которые в большинстве случаев не равны для разных экземпляров String (если они не интернированы). Вам нужно использовать метод String#equals(otherString) или string#equalsIgnoreCase(otherString) .
for (int i = 0; i < books.size(); i ) {
if (books.get(i).getTitle().equals(title)) {
books.get(i).borrowed();
}
}
Вы также можете использовать расширенный цикл for
for (Book book : books) {
if (book.getTitle().equals(title)) {
book.borrowed();
}
}