我在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);
}
}
}
英文: 如果movies链表为空,则添加已经传入的movie(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);
}
}
关于java - 我如何在java中的链接列表中找到与另一个字符串匹配或与该字符串不匹配的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19671735/