Помогите с toString () - добавление в коллекции - PullRequest
1 голос
/ 19 февраля 2010

Я добавляю информацию из main () Я добавляю различную информацию для CD, DVD, книги ..

У меня есть 3 отдельных класса - в предмете есть 3 класса ...

  1. проект - основной ()

  2. Библиотека - эта функция выполняет все добавления

  3. Предмет (cd, dvd, книга) наследования

Для музыки я добавляю информацию о группе, информацию о названии, ключевые слова и участников .. Я добавляю участников отдельно от другой информации ..

Как вы можете видеть, члены выводятся неправильно, как остальные ..

>>> music CDs:

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

C:\Java\a03>

Я использую ту же функцию 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);
        }

в классе Library - здесь есть функция addbandmember ..

Может ли это быть причиной ??

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

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

}

В классе Items есть функция addband - tostring ()

вот класс 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());
    }
}

У меня есть другая информация в классе предметов, такая как класс nook, класс кинофильмов, который я не показывал. Я хотел бы, чтобы все было так, как я его настроил ..

Итак, если другие элементы печатаются нормально, чем, может быть, это приведение в функции addbandmember, что вызывает у меня проблемы?

Ответы [ 2 ]

6 голосов
/ 19 февраля 2010

members печатает так, как есть, так как это массив (вы можете узнать это по факту, когда он выводит в виде членов: [Ljava.lang.String; @ 61de33).

Вместо этого вам нужно перебрать его и напечатать каждый элемент.

Например,

for (String member : members) {
   ...
}     

Самый простой способ - использовать Arrays.toString ().Либо добавьте к StringBuilder, а затем распечатайте его.Вы можете быть умнее и использовать StringUtils.join () из Apache Commons Lang , что даст вам больше контроля.

3 голосов
/ 19 февраля 2010

Массивы не имеют полезной реализации toString(). Вы можете распечатать элементы в цикле или использовать метод Arrays.toString () , чтобы сделать это для вас:

return "-Music-" + "\n"
    + "band: " + artist + "\n"
    + "# songs: " + number + "\n"
    + "members: " + Arrays.toString(members) + "\n"
    + "\n"
    + super.toString() + "\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...