Java 添加到集合-继承
我正在尝试创建一个项目,将main()中的cd/dvd/电影信息添加到收藏库中 然后打印添加的信息。 例如:输出Java 添加到集合-继承,java,Java,我正在尝试创建一个项目,将main()中的cd/dvd/电影信息添加到收藏库中 然后打印添加的信息。 例如:输出 -Book- author: Robert A. Heinlein # pages: 325 title: Starship Troopers keywords: science fiction, war, weapons -Music- band: five finger death punch # songs: 15 members: Zoltan Ba
-Book-
author: Robert A. Heinlein
# pages: 325
title: Starship Troopers
keywords: science fiction, war, weapons
-Music-
band: five finger death punch
# songs: 15
members: Zoltan Bathory, Ivan Moody,Jeremy Spencer,Matt Snell,Jason Hook
title: War is the answer
keywords: rock
我现在有6节课
1.1项目1-主要内容()
2.库-我添加到数据库的位置
3.项目-继承(标题和编号)
4.cd
5.dvd
6.电影
我试图使用继承,所以我想保留我拥有的文件。
我的问题是,我正在尝试向library类中的集合添加内容。我只是不知道怎么做
这是我认为你需要看的课程
import java.io.PrintStream;
import java.util.Collection;
public class project
{
private static Library library = new Library();
public static void main(String[] args)
{
PrintStream out = System.out; // we will be printing to the standard output stream
Item item;
// add items to library
out.println(">>> adding items to library:\n");
item = library.addBook("The Curious Incident of the Dog in the Night-Time", "Mark Haddon", 240, "autism", "Asperger's Syndrome");
if (item != null)
library.printItem(out, item);
item = library.addBook("Starship Troopers", "Robert A. Heinlein", 325, "science fiction", "war", "weapons");
if (item != null)
library.printItem(out, item);
item = library.addBook("The Moon Is A Harsh Mistress", "Robert A. Heinlein", 389, "science fiction", "moon", "social structures");
if (item != null)
library.printItem(out, item);
item = library.addMusicCD("Europe In '72", "Grateful Dead", 12, "acid rock", "sixties", "jam bands");
if (item != null) {
library.addBandMembers(item, "Jerry Garcia", "Bill Kreutzman", "Keith Godcheaux");
library.printItem(out, item);
}
item = library.addMusicCD("Don't Let Go", "Jerry Garcia Band", 15, "acid rock", "jam bands");
if (item != null) {
library.addBandMembers(item, "Jerry Garcia", "Keith Godcheaux");
library.printItem(out, item);
}
item = library.addMusicCD("Sergeant Pepper's Lonely Hearts Club Band", "Beatles", 10, "acid rock", "sixties");
if (item != null) {
library.addBandMembers(item, "John Lennon", "George Harrison", "Ringo Starr");
library.printItem(out, item);
}
item = library.addMovieDVD("Lost In Translation", "Sofia Coppola", 14, "Japan", "loneliness");
if (item != null) {
library.addCast(item, "Bill Murray", "Scarlett Johansson");
library.printItem(out, item);
}
item = library.addMovieDVD("Groundhog Day", "Harold Ramis", 14, "newscaster", "groundhog", "time");
if (item != null) {
library.addCast(item, "Bill Murray", "Andie MacDowell");
library.printItem(out, item);
}
// print books, musicCDs, movies
out.println(">>> books:\n");
printItems(out, library.books());
out.println(">>> music CDs:\n");
printItems(out, library.musicCDs());
out.println(">>> movies:\n");
printItems(out, library.movies());
// print items for keyword
printItemsForKeyword(out, "science fiction");
printItemsForKeyword(out, "jam bands");
printItemsForKeyword(out, "xxx");
// items by artist
out.println(">>> books by Robert A. Heinlein:\n");
printItems(out, library.booksByAuthor("Robert A. Heinlein"));
out.println(">>> music by the Grateful Dead:\n");
printItems(out, library.musicByBand("Grateful Dead"));
out.println(">>> music by the Rolling Stones:\n");
printItems(out, library.musicByBand("Rolling Stones"));
out.println(">>> movies by Sofia Coppola:\n");
printItems(out, library.moviesByDirector("Sofia Coppola"));
out.println(">>> music by Jerry Garcia:\n");
printItems(out, library.musicByMusician("Jerry Garcia"));
out.println(">>> movies with Bill Murray:\n");
printItems(out, library.moviesByActor("Bill Murray"));
}
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);
}
private static void printItems (PrintStream out, Collection<Item> items)
{
if (items != null && items.size() > 0)
for (Item item : items)
library.printItem(out, item);
else
out.println("none\n");
}
}
这是cd类-dvd类几乎完全相同
import java.util.*;
public class CD extends Item
{
private String artist;
private String members;
public CD(String theTitle, String theArtist, String theMembers, int number)
{
super(theTitle,number);
artist = theArtist;
members = theMembers;
}
public String getArtist()
{
return artist;
}
public String getMembers()
{
return members;
}
public void print()
{
System.out.println("-Music-");
System.out.println("band: " + artist);
}
}
我不确定是否可以将cd/dvd/电影类合并到items类中 我的主要问题是: 如何将每张cd/dvd添加到收藏中 在图书馆课上 我应该定义一个集合来添加到每个addfunction(addMusicd、addBandMembers、addMovieDVD等)中,还是应该将集合放在类的开头?我该如何添加到该集合中
public Item addMusicCD(String title, String band, int nSongs, String... keywords)
{
Collection MusicCollection = new HashSet(); // how should i add each cd/dvd to collections?????
MusicCollection.add(title);
return null;
}
我也试图返回一个项目,不能!我需要退回什么物品??
我知道这是很多信息。很抱歉
希望有人能帮助我,而不仅仅是取笑我。我正在尝试从c学习java++
谢谢你能给我的任何帮助。在添加音乐CD时,制作一张新CD(各种比特)
将生成的CD添加到集合中
归还它
如果您使用泛型来声明集合,那么您可能更容易将这一切结合在一起
class Library {
private Set<CD> theCDs;
public Item addCD(String title) {
CD cd = new CD(title);
theCDS.add(cd);
return cd;
}
}
类库{
私人电视台;
公共项添加CD(字符串标题){
CD=新CD(标题);
新增(cd);
返回光盘;
}
}
等等等等等等。我可能会添加另一个继承树,因此库是HashSet的抽象子类:
public abstract class Library<T extends Item> extends HashSet<T>{
...
abstract void addItem(T item);
}
公共抽象类库扩展了HashSet{
...
摘要无效附加项(T项);
}
然后通过子类化库类来创建所有库:
public class CDLibrary extends Library<Cd>{
...
@Override
public void addItem(Cd item){
// Maybe add some information of cd to a hashmap for lookups, or whatever
...
this.add(item);
}
公共类CDLibrary扩展了库{
...
@凌驾
公共无效附加项(Cd项){
//也许可以将cd的一些信息添加到hashmap中进行查找,或者其他什么
...
本条增加(项目);
}
当您对HashSet进行子类化时,所有的添加和删除操作都会为您完成
如果不需要为每个项指定特定的add方法,只需删除库的抽象方法,并利用泛型语法,在子类化时指定一种新类型的库
你可以考虑子类的ARAYLIST,或者类似的东西,因为HASSET没有一个GET()方法,而ARAYLIST确实是这样的,上面的代码只是你能做的一个例子。 如果不清楚,我将尝试进一步澄清!但我希望您能够理解-子类化是为了继承您需要的函数,而不是再次创建它们。泛型(您知道泛型吗?)是为了确保类型安全,因此您不能将DVD添加到CDLibrary
另外,请确保覆盖项的equals()和hashcode(),以确保可以区分这两个项我希望这是有意义的!您需要将CD、DVD和书籍分为不同的数据结构吗?您的使用案例是什么?如果您需要以不同的方式获取它们,则可以使用不同的数据结构 否则,我认为情况就是这样,我认为你可以设置一个
集合
并将所有项目转储到其中
public static class Library{
private Set<Item> items = new HashSet<Item>();
public void add(Item i){
items.add(i);
}
public String toString(){
return items.toString()
}
}
公共静态类库{
private Set items=new HashSet();
新增公共作废(第一项){
项目.添加(i);
}
公共字符串toString(){
return items.toString()
}
}
而且,在
项
子类中,必须重写toString()
,所有内容都会自动打印出来。我认为您需要进一步学习面向对象原则
库应该能够添加项。库方法addBook(许多参数)和addDVD()等应该被更通用的addItem(项项、字符串…关键字)替换
项目可以是CD、DVD或电影。由CD类添加乐队成员,而不是库类。
将项目添加到库中类似于
CD cd = new CD("Europe In '72", "Grateful Dead", 12);
cd.addBandMembers("Jerry Garcia", "Bill Kreutzman", "Keith Godcheaux");
library.addItem(cd, "acid rock", "sixties", "jam bands"));
希望这有助于你找到一个新的路径。我不能弄清楚你不能理解的东西。第一次近似,java继承和集合就像C++一样。做你的项目的类型层次结构,使用泛型:设置或设置或者任何吸引。我会采取一个小的稳定。除了你不能从<代码>空洞< < <代码> CD <代码>返回。代码>方法。唯一的问题是它找不到CD构造函数CD=new CD(标题、乐队、成员、NSNGS、关键字);显然不是这样,因为他区分了cd、dvd和书籍。OP中的第一个例子是一本书和一张cd的印刷品,具有完全不同的属性。不清楚是否会有不同的数据结构,因为OP不是100%确定OO概念或是否真的需要它。这就是对于不同的属性,这就是为什么实现
Item
的每个类都必须实现toString()
。这样,每个项目都知道如何打印自己。对于一个简单的用例来说,这就足够了。好吧,那么我们基本上说的是同一件事:)你的帖子没有明确说明你想对项目进行子类化,这就是我误解你建议的原因。无论如何,这个问题似乎已经死了。
public static class Library{
private Set<Item> items = new HashSet<Item>();
public void add(Item i){
items.add(i);
}
public String toString(){
return items.toString()
}
}
CD cd = new CD("Europe In '72", "Grateful Dead", 12);
cd.addBandMembers("Jerry Garcia", "Bill Kreutzman", "Keith Godcheaux");
library.addItem(cd, "acid rock", "sixties", "jam bands"));