我有一个收藏,将CD,DVD,书籍信息添加到哈希集中。
每个人都有一个关键字,我想搜索一个特定的关键字并返回特定的书,CD,dvd ...这是输出,可以给您一个想法。
-Book-
Author: Robert A. Heinlein
# pages 325
title: Starship Troopers
keywords: [science fiction, war, weapons]
-Music-
band: Grateful Dead
# songs: 12
members: [Jerry Garcia, Bill Kreutzman, Keith Godcheaux]
title: Europe In '72
keywords: [acid rock, sixties, jam bands]
-Movie-
director: Sofia Coppola
# scenes: 14
cast: [Bill Murray, Scarlett Johansson]
title: Lost In Translation
keywords: [Japan, loneliness]
>>> items for keyword: science fiction
none
>>> items for keyword: jam bands
none
C:\Java\a03>
我有3节课。
主要()
图书馆-这是我做所有CD,DVD,书籍的地方。查找等
使用继承的项目类(CD类,DVd类,书籍类)
在main()中,我正在向库类发送信息以添加到集合中。
然后我打印出刚添加的所有书籍,CD,电影。
然后我做一个特定的关键字查找。
这就是我遇到问题的地方。我在CD,DVD,书籍类中编写了一个getkeyword函数。
我想做的是获取关键字,然后查看它们是否匹配,然后将其作为集合返回。
这是main()我只会显示其中的一些内容以保持简短-由于其效果很好,因此我不会显示如何添加。
printItemsForKeyword(out, "science fiction");
printItemsForKeyword(out, "jam bands");
printItemsForKeyword(out, "xxx");
private static void printItemsForKeyword (PrintStream out, String keyword)
{
Collection<Item> items;
out.printf(">>> items for keyword: %s\n\n", keyword);
items = library.itemsForKeyword(keyword);
printItems(out, items);
}
现在在图书馆课上是我需要帮助的地方
在itemsForKeyword(String keyword)函数中...
所以,我要寻找的第一件事是“科幻小说”
我认为我需要投射物品,因为物品具有CD,DVD,书籍类,并且我需要退货???
现在我正在尝试返回键,因为它与返回键不兼容,所以不会。
public class Library
{
private Set<Item> theCDs = new HashSet<Item>();
private Set<Item> theDVDs = new HashSet<Item>();
private Set<Item> theBooks = new HashSet<Item>();
public Collection<Item> itemsForKeyword(String keyword)
{
Item key = new Item();
((CD)key).getKeyword(); // i dont think i am even doing this right
if(key.equals(keyword))
{
return key; // cant return key
}
return null;
}
我确实在下面的每个类中定义了一个getKeywords()函数。
这是Items类,因为您需要仔细检查。
import java.io.PrintStream;
import java.util.Collection;
import java.util.*;
class Item
{
private String title;
public String toString()
{
String line1 = "title: " + title + "\n";
return line1;
}
public void print()
{
System.out.println(toString());
}
public Item()
{
}
public Item(String theTitle)
{
title = theTitle;
}
public String getTitle()
{
return title;
}
}
class CD extends Item
{
private String artist;
private String [] members;
private String [] keywords;
private int number;
public CD(String theTitle, String theBand, int Snumber, String... keywords)
{
super(theTitle);
this.artist = theBand;
this.number = Snumber;
this.keywords = keywords;
}
public void addband(String... member)
{
this.members = member;
}
public String getArtist()
{
return artist;
}
public String [] getMembers()
{
return members;
}
public String [] getKeyword()
{
return keywords;
}
public String toString()
{
return "-Music-" + "\n"
+ "band: " + artist + "\n"
+ "# songs: " + number + "\n"
+ "members: " + Arrays.toString(members)
+ "\n" + super.toString()
+ "keywords: " + Arrays.toString(keywords)
+ "\n" + "\n" ;
}
public void print()
{
System.out.println(toString());
}
}
class DVD extends Item
{
private String director;
private String [] cast;
private int scenes;
private String [] keywords;
public DVD(String theTitle, String theDirector, int nScenes, String... keywords)
{
super(theTitle);
this.director = theDirector;
this.scenes = nScenes;
this.keywords = keywords;
}
public void addmoviecast(String... members)
{
this.cast = members;
}
public String [] getCast()
{
return cast;
}
public String getDirector()
{
return director;
}
public String [] getKeyword()
{
return keywords;
}
public String toString()
{
return "-Movie-" + "\n"
+ "director: " + director + "\n"
+ "# scenes: " + scenes + "\n"
+ "cast: " + Arrays.toString(cast) + "\n"
+ super.toString()
+ "keywords: " + Arrays.toString(keywords)
+ "\n" + "\n" ;
}
public void print()
{
System.out.println(toString());
}
}
class Book extends Item
{
private String author;
private int pages;
private String [] keywords;
public Book(String theTitle, String theAuthor, int nPages, String... keywords)
{
super(theTitle);
this.author = theAuthor;
this.pages = nPages;
this.keywords = keywords;
}
public String getAuthor()
{
return author;
}
public String [] getKeyword()
{
return keywords;
}
public void print()
{
System.out.println(toString());
}
public String toString()
{
return "-Book-" + "\n"
+ "Author: " + author + "\n"
+ "# pages " + pages + "\n"
+ super.toString()
+ "keywords: " + Arrays.toString(keywords)
+ "\n" + "\n" ;
}
}
我认为我需要进行某种类型的转换的原因是因为我必须在添加时
乐队成员..
public void addBandMembers(Item musicCD, String... members)
{
((CD)musicCD).addband(members);
}
那么,我该怎么做才能在项目中找到关键字并将其返回?
直接查看场景并进行某种类型的转换以使其返回会更好吗?我只是难过..
谢谢..
最佳答案
创建一个将关键字与它们所代表的项目相关联的索引(SortedMap<String, List<Item>>
)。将对象添加到库后,将其映射到索引中的每个关键字,并根据需要添加新的关键字。搜索索引以找到对象。