0

我在 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)。否则如果movies链表不为空,则检查链表中的每一项,看看传入的电影是否已经存在。如果它已经存在,请添加一个副本。否则如果传入的电影不存在,则将该电影添加到列表中。

除了最后一部分,这一切都有效。

我在空时添加一部电影并得到这个:

 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
4

1 回答 1

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);
    }
}
于 2013-10-30T00:49:58.823 回答