首先:我是Java和这个网站的新手,这是我在这里的第一篇文章。我在谷歌和这个网站上搜索了我的问题,发现了一些(很多(类似的帖子,但我找不到一个能帮助我解决编码问题的。
我有两个类:图书馆和图书。在过去的四个小时里,我一直在尝试编写一种方法,如果一本书是唯一的,就将它添加到Library(ArrayList(中。如果它不是唯一的,就会打印一条消息,说图书馆已经有了这本书。
类:库
字段:
private ArrayList<Book> bookList;
构造函数:
bookList = new ArrayList<Book>();
方法:
public void addBook(Book bookTitle)
{
for(Book bookId:bookList) {
if (bookTitle.equals(bookId)) {
bookList.add(bookTitle);
System.out.println("Book registered."); }
else { System.out.println("This book is not unique"; }
}
}
我没有得到任何编译错误,但它不起作用。该对象不会添加到我的ArrayList中,也不会打印任何消息。我也尝试过:
if (bookId != bookTitle)
没有结果。
希望这里有人能帮我解释一下我做错了什么,我将不胜感激。
您似乎对IF语句中正在计算的表达式的作用感到困惑。你的if
表达有效地说:;如果bookTitle与bookList中的一个匹配(即是重复的(";做X,否则做Y。
";do X";分支机构说";添加书";booklist.add(bookTitle)
——当它是重复的——这是错误的。
";做Y";你的if
分支说(更正语法(:System.out.println("This book is not unique");
,对bookList
没有影响
相反,我交换了两个分支X
和Y
->Y
和X
所以你应该有:
public void addBook(Book bookTitle){
for(Book bookId : bookList) {
if (bookTitle.equals(bookId)) {
System.out.println("This book is not unique");
break; // breaks out of the surrounding for-loop
// stop checking books if we enter this branch
} else {
bookList.add(bookTitle);
System.out.println("Book registered.");
// keep checking more books if we enter this branch
}
}
}
研究告诉我们,代码嵌套得越多,错误发生的可能性就越大,因为逻辑更难消化。
我试着把它拆开,想出了:
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
class LibraryApplication {
static Library library;
public static void main(String[] args) {
library = new Library();
addBook(new Book("Title 1"));
addBook(new Book("Title 1"));
addBook(new Book("Title 2"));
library.printAllBooks();
}
public static void addBook(Book bookTitle){
if (library.isBookInLibrary(bookTitle)) {
System.out.println("This book (" + bookTitle.getTitle() + ") is not unique");
} else {
library.add(bookTitle);
System.out.println("Book " + bookTitle.getTitle() + " registered.");
}
}
}
class Book {
private String title;
public Book(String title) {
this.title = title;
}
public String getTitle() {
return title;
}
// Called by Library's printAllBooks method (library.toString())
@Override
public String toString() {
return "Book{" +
"title='" + title + ''' +
'}';
}
// auto generated by IDE (important for checking whether a collection contains an equal object)
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Book)) return false;
Book book = (Book) o;
return title.equals(book.title);
}
// auto generated by IDE (important for checking whether a collection contains an equal object)
@Override
public int hashCode() {
return Objects.hash(title);
}
}
class Library {
List<Book> library = new ArrayList<Book>();
public boolean isBookInLibrary(Book book){
return library.contains(book);
}
public void add(Book book) {
library.add(book);
}
public void printAllBooks() {
System.out.println(library.toString());
}
}
输出:
Book Title 1 registered.
This book (Title 1) is not unique
Book Title 2 registered.
[Book{title='Title 1'}, Book{title='Title 2'}]
Process finished with exit code 0