帮助toString() - 添加到集合

1 java

我正在从main()添加信息我正在为CD,DVD,书添加不同的信息.

我有3个单独的类 - 项目中有3个类...

  1. 项目 - 主要()

  2. 库 - 此功能完成所有添加

  3. 项目(cd,dvd,book)继承

对于音乐我正在添加乐队信息,标题信息,关键字和成员..我分别添加成员而不是其他信息..

正如您所看到的那样,成员输出不正确.

>>> music CDs:

-Music-
band: Jerry Garcia Band
# songs: 15
members: [Ljava.lang.String;@61de33
title: Don't Let Go

C:\Java\a03>
Run Code Online (Sandbox Code Playgroud)

我为成员使用相同的toString()函数,因为我是其余的,所以我不知道为什么它会这样做..

我会给你尽可能多的信息,我认为你需要看到..

Main() - 正如您所看到的,它调用了2个不同的函数.

addbandmembers是我遇到问题的地方......

out.println(">>> adding items to library:\n");
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);
        }
Run Code Online (Sandbox Code Playgroud)

在Library类中 - 这是addbandmember函数..

这可能是原因吗?

public void addBandMembers(Item musicCD, String... members)
{

    ((CD)musicCD).addband(members);

}
Run Code Online (Sandbox Code Playgroud)

在Items类中,这里是函数addband - tostring()

这是扩展items类的CD类.

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 int number;

    public CD(String theTitle, String theBand, int Snumber, String... keywords)
    {
        super(theTitle);
        this.artist = theBand;
        this.number = Snumber;
    }

    public void addband(String... member)
    {
        this.members = member;
    }

    public String getArtist()
    {
        return artist;
    }

    public String [] getMembers()
    {
        return members;   
    }

    public String toString()
    {
        return  "-Music-" + "\n" + "band: " + artist + "\n" + "# songs: " + number + "\n" + "members: " + members + "\n"  + "\n" + super.toString() + "\n";
    }

    public void print()
    {
        System.out.println(toString());
    }
}
Run Code Online (Sandbox Code Playgroud)

我在items类中确实有其他信息,比如我没有展示的角落类,电影类.我想按照我设置的方式保留所有内容..

那么,如果其他项目的打印效果可能比addbandmember函数中的强制转换功能给我带来了问题呢?

Bri*_*new 6

members正在打印它的方式,因为它是一个数组(你可以通过它的输出作为成员来说明这一点:[Ljava.lang.String; @ 61de33).

相反,您需要遍历它并打印每个元素.

例如

for (String member : members) {
   ...
}     
Run Code Online (Sandbox Code Playgroud)

最简单的方法是使用Arrays.toString().或者附加到a StringBuilder然后打印到此.您可以更聪明,并使用来自Apache Commons Lang的StringUtils.join(),这将为您提供更多控制.