所以我要创建几个类来处理dvd对象的集合。我的add和remove方法应该执行以下操作:
添加–此方法用于添加新的dvd。它应该有五个参数来表示dvd的标题、类别、运行时间、年份和价格。如果标题已在dvd收藏中,则无需添加或更改任何内容。否则,dvd将添加到收藏中。如果dvd集合中已有dvd条目,则返回该条目;如果添加了新条目,则返回null。
remove–此方法应具有标题作为参数。如果找到了标题,它应该从收藏中删除dvd。它返回已删除的dvd条目,如果找不到标题,则返回null。
我的方法目前只适用于文本文件中的第一个对象,但是当我在文件后面键入另一个对象时,它只返回null。
我的文本文件包含以下6个对象。亚当纪录片78分钟2012 7.99 choo choo纪录片60分钟2006 11.99早安美国纪录片80分钟2010 9.99生命是美丽的戏剧125分钟1999 15.99早鸟漫画150分钟2008 17.99神秘河之谜130分钟2002 24.99
public DVD add(String titlez, String categoryz, String runTimez, String yearz, String pricez) {
Iterator<DVD> it = arraylist.iterator();
DVD dvd = it.next();
if(dvd.getTitle().equals(titlez)){
return dvd;
}
else{
DVD dvd1 = new DVD (titlez, categoryz, runTimez, yearz, pricez);
arraylist.add(dvd1);
return null;
}
}
@Override
public DVD remove(String title) {
Iterator<DVD> it = arraylist.iterator();
DVD dvd = it.next();
if(dvd.getTitle().equals(title)){
arraylist.remove(dvd);
return dvd;
} else {
return null;
}
}
3条答案
按热度按时间uoifb46i1#
因为有人已经“回答”了,你不是在重复整个列表。
我已经重构了你的代码,使add和remove方法更干净。我创建了一个pojo(纯旧java对象)dvd和一个dvdservice,它有一个dvdstore。
dvdstore使用titlez作为“键”来存储dvd。add和remove方法使用exists方法检查dvd密钥是否在dvdstore中。
我为添加或删除返回true或false。我尝试添加两次新的dvd“film1”,然后删除两次。
运行的输出如下:
我已经删除了您正在使用的迭代器,并在hashmap中搜索“titlez”键。我还为add和remove返回一个“简单布尔值”。添加或删除已成功(true或false)。
这使得添加和删除易于理解和维护。
izj3ouym2#
您没有在整个列表上循环尝试改用此选项:
w80xi6nr3#
你的
add
方法没有遍历列表;只是测试第一个元素(如果您的列表为空,它也会抛出一个异常。)请改为尝试此操作,它会在确定标题不存在之前遍历整个列表(我用的是增强型的for
循环语法而不是传统的for
循环。)你的
remove
方法也有类似的问题。改用这个:注意,这种风格有点危险。通常,您不应该在遍历列表时修改它。如果迭代继续,你会得到一个
ConcurrentModificationException
扔了。但是,由于在修改列表时也会立即停止迭代,所以应该没问题。有两种方法可以避免异常并仍然修改列表(1) 使用ListIterator
而不是Iterator
,因为ListIterator
有自己的remove()
您可以使用的方法。你得回到传统的生活for
循环语法(2) 将删除推迟到迭代完成,如下所示: