【发布时间】:2019-11-29 02:00:52
【问题描述】:
我必须为我的初学者 Java 类做一个与继承有关的项目。
MediaItem 类封装了表示 MediaItem 所需的数据。这是已经给出的代码:
public class MediaItem {
protected String title;
protected String author;
protected String genre;
/* Subclasses may add specific parameters to their constructor's
* parameter lists.
*/
public MediaItem(String title, String author, String genre){
this.title = title;
this.author = author;
this.genre = genre;
}
// get method for the title
public String getTitle(){
return title;
}
// get method for the author
public String getAuthor(){
return author;
}
// get method for the genre
public String getGenre(){
return genre;
}
// Subclasses should override.
public String toString(){
return title+", "+author+", "+genre;
}
}
MediaList 类封装了用户收藏中的媒体项目列表。该列表实现为 MediaList 类型的 ArrayList。每种类型的媒体项目都由 Book、Movie、Podcast 或 Song 类的实例表示。这些类是 MediaItem 的子类。该列表将媒体项存储为 MediaItem 类型的引用。
这是MediaList中添加和删除项目的代码:
public void addItem(MediaItem newItem){
itemList.add(newItem);
}
public boolean removeItem(String targetTitle, String targetAuthor){
boolean result = false;
for (MediaItem media : itemList) {
if(itemList.contains(targetTitle) && itemList.contains(targetAuthor)){
itemList.remove(media);
result = true;
} else {
result = false;
}
}
return result;
}
当这个测试用 Junit 运行时,会抛出一个错误,说期望大小是 但它应该是 当我运行它并回答提示时,它说媒体项目已添加,但当我尝试删除媒体项目时,它显示“在库中找不到 Black Panther,没有任何内容被删除。”
@Test
public void addOneRemoveOneItemUpdateSizeTest() {
MediaItem item = new Movie("Black Panther", "Coogler", "fantasy", 134, "Chadwick Boseman", "2018");
mediaList.addItem(item);
mediaList.removeItem("Black Panther", "Coogler");
int studentSize = mediaList.getNumItems();
assertEquals("Test 30: Add item, remove item size is 0.", 0, studentSize);
Movie类
public class Movie extends MediaItem {
public Movie(String title, String author, String genre,
int playTime, String leadActor, String releaseYear){
super(title, author, genre);
playTime = 0;
leadActor = "noLead";
releaseYear = "noRelease";
}
public int getPlayTime(){
return playTime;
}
public String getLeadActor(){
return leadActor;
}
public String getReleaseYear(){
return releaseYear;
}
@Override
public String toString(){
super.toString();
return "Movie: " + title + ", " + author + ", " + genre + ", " + playTime + ", " + leadActor + ", " + releaseYear;
}
}
我的 removeItem 方法错了吗?我不明白为什么找不到标题。有人能指出我正确的方向吗?
【问题讨论】:
-
你能提供你的
Movie类吗? -
您在迭代列表时不得修改列表。您可以手动使用
Iterator,然后,您可以在其上使用remove()来删除当前元素,或者在使用Java 8 时,使用public boolean removeItem(String targetTitle, String targetAuthor) { return itemList.removeIf(media -> media.getTitle().equals(targetTitle) && media.getAuthor().equals(targetAuthor)); } -
@MaxPeng 刚刚添加
标签: java arraylist collections