我有一个收藏,将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>>)。将对象添加到库后,将其映射到索引中的每个关键字,并根据需要添加新的关键字。搜索索引以找到对象。

10-08 02:53