У меня есть коллекция, я добавил 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 класса.
- Main ()
- Библиотека - это то место, где я делаю добавление CD, DVD, книг. поиск и т. д.
- Класс предметов (класс CD, класс DVd, класс книги) с использованием наследования ..
в main () я посылаю информацию в библиотечный класс для добавления в наборы.
затем я распечатываю все книги, CD, фильмы, которые только что добавили.
тогда я делаю поиск по конкретному ключевому слову.
И вот тут у меня проблемы. я написал функцию getkeyword на CD, DVD, в классе книги.
Что я хочу сделать, это получить ключевое слово, а затем посмотреть, совпадают ли они, а затем вернуть его как коллекцию.
здесь 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) ...
Итак, первое, что я пытаюсь найти, это "Научная фантастика"
Я думаю, что мне нужно разыграть предмет, так как предмет имеет классы 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);
}
Итак, что я могу сделать, чтобы найти ключевое слово в элементах и вернуть их?
было бы лучше взглянуть прямо на наборы и сделать какой-то тип приведения, чтобы вернуть его? я просто в тупик ..
Спасибо ..