Java 将唯一对象实例添加到ArrayList的方法无效

Java 将唯一对象实例添加到ArrayList的方法无效,java,if-statement,arraylist,Java,If Statement,Arraylist,首先:我对Java和这个网站是新手,这是我在这里的第一篇帖子。关于我的问题,我在谷歌和这个网站上都搜索过,找到了一些(很多)类似的帖子,但我找不到一篇能帮助我解决编码问题的帖子 我有两门课:图书馆和书籍。在过去的四个小时里,我一直在尝试编写一种方法,如果一本书是唯一的,可以将它添加到库(ArrayList)中。如果不是唯一的,则会打印一条消息,说明图书馆已经拥有该书 类:库 字段: private ArrayList<Book> bookList; bookList = new A

首先:我对Java和这个网站是新手,这是我在这里的第一篇帖子。关于我的问题,我在谷歌和这个网站上都搜索过,找到了一些(很多)类似的帖子,但我找不到一篇能帮助我解决编码问题的帖子

我有两门课:图书馆和书籍。在过去的四个小时里,我一直在尝试编写一种方法,如果一本书是唯一的,可以将它添加到库(ArrayList)中。如果不是唯一的,则会打印一条消息,说明图书馆已经拥有该书

类:

字段:

private ArrayList<Book> bookList;
bookList = new ArrayList<Book>();
}

我没有得到任何编译错误,但它不工作。该对象未添加到我的ArrayList,不会打印任何消息。我也尝试过:

if (bookId != bookTitle)
没有结果


希望这里有人能帮助我,并向我解释我做错了什么,我们将不胜感激。

您似乎对IF语句中的表达式感到困惑。你们是
if
表达式有效地说:“若书名和书名列表中的一个匹配(即是重复的)”,那个么就做X,否则就做Y

“DoX”分支说“添加图书”
booklist.Add(bookstitle)
——当它是重复的时候——这是错误的

你的
if
的“doy”分支说(正确的语法):
System.out.println(“这本书不是唯一的”)
书目没有影响

相反,我交换了两个分支
X
Y
->
Y
X
,因此您应该:

public void addBook(书名){
for(图书编号:bookList){
if(书名等于(书号)){
System.out.println(“这本书不是唯一的”);
break;//从循环的周围中断
//如果我们进入这家分店,就停止查账
}否则{
图书目录。添加(书名);
System.out.println(“图书注册”);
//如果我们进入这家分店,就继续查更多的书
}                
} 
}
研究告诉我们,代码越嵌套,错误发生的可能性就越大,因为逻辑越难理解

我曾尝试将其全部拆开,并提出:

import java.util.ArrayList;
导入java.util.List;
导入java.util.Objects;
类库应用{
静态图书馆;
公共静态void main(字符串[]args){
库=新库();
addBook(新书(“标题1”);
addBook(新书(“标题1”);
addBook(新书(“标题2”);
library.printAllBooks();
}
公共静态无效addBook(书名){
if(library.isBookInLibrary(书名)){
System.out.println(“这本书(“+bookTitle.getTitle()+”)不是唯一的”);
}否则{
添加(书名);
System.out.println(“Book”+bookTitle.getTitle()+“registed.”);
}
}
}
课堂用书{
私有字符串标题;
公共书籍(字符串标题){
this.title=标题;
}
公共字符串getTitle(){
返回标题;
}
//由库的printAllBooks方法(Library.toString())调用
@凌驾
公共字符串toString(){
返回“Book{”+
“title=”+title+“\”+
'}';
}
//由IDE自动生成(对于检查集合是否包含相等对象很重要)
@凌驾
公共布尔等于(对象o){
如果(this==o)返回true;
如果(!(o书本实例))返回false;
簿册=(簿册)o;
返回title.equals(book.title);
}
//由IDE自动生成(对于检查集合是否包含相等对象很重要)
@凌驾
公共int hashCode(){
返回Objects.hash(title);
}
}
类库{
列表库=新的ArrayList();
公共布尔值isBookInLibrary(图书){
归还图书馆。包含(书);
}
公共无效添加(书本){
图书馆.增加(书);
}
公共作废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

您可以共享Book and Library类吗?您是否在
Book
类中实现了
equals()
方法?您可能没有在类
Book
中重写
equals()
方法。检查?您可以检查ArrayList#contains方法。
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