Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 添加到集合-继承_Java - Fatal编程技术网

Java 添加到集合-继承

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

我正在尝试创建一个项目,将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 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"));