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