我在java中有一个自定义的通用链表(它不是java的LinkedList或任何集合)。 我的链表有一个节点,一个ListInterface,实际的LinkedList,一个类文件和一个带有main方法的文件。这个链表和类应该形成一个DVD库存管理器。 我正在尝试做的是遍历列表并检查用户传入的字符串是否等于链表中某个对象的变量之一的字符串。
这是我到目前为止所拥有的:
if (movies.isEmpty()) {
movies.add(new Dvd(userMovie), movies.length()+1);
} else if (!movies.isEmpty()) {
for (int i = 1; i <= movies.length(); i++) {
if (movies.get(i).getTitle().equals(userMovie)) {
movies.get(i).addCopy();
} else if (!movies.get(i).getTitle().equals(userMovie)) {
movies.add(new Dvd(userMovie), movies.length()+1);
}
}
}
英文版:如果电影链表为空,请添加已传入的电影 (userMovie)。否则,如果"电影"链表不为空,请检查列表中的每个项目以查看已传入的电影是否已存在。 如果它已存在,请向其添加副本。 否则,如果传入的电影不存在,请将该电影添加到列表中。
除了最后一部分之外,这一切都有效。
我在空时添加一部电影并得到这个:
Star Wars 1 // one copy of star wars has been added
然后,我再次添加相同的电影,副本将更新:
Star Wars 2
然后我尝试添加不同的电影,它以两个副本而不是 1 个开始:
Harry Potter 2
然后我尝试再次添加同一部电影,看看会发生什么,它给了我这个:
Star Wars 1
Harry Potter 3
Harry Potter 2
内部循环的逻辑不正确。
试试这个,你只想添加一个新电影一次,而不是为每个与标题不匹配的电影添加一次。
if (movies.isEmpty()) {
movies.add(new Dvd(userMovie), movies.length()+1);
} else if (!movies.isEmpty()) {
boolean found = false;
for (int i = 1; i <= movies.length(); i++) {
if (movies.get(i).getTitle().equals(userMovie)) {
movies.get(i).addCopy();
found = true;
}
}
if (!found) {
movies.add(new Dvd(userMovie), movies.length()+1);
}
}