Заполнение массива объектами

Мне нужна помощь с вопросом о домашнем задании, над которым я работаю. Мне нужно создать класс "Библиотека", который содержит массив объектов Song (вместимость 10). Затем сделайте метод addSong. Вот что я до сих пор:

public class Library{

    Song[] arr = new Song[10];

    public void addSong(Song s){
        for(int i=0; i<10; i++)
            arr[i] = s;
    }
}

Мой вопрос: есть ли другой способ заполнить массив? позже мне нужно будет искать песню на основе значения индекса. Поэтому я создам такой метод, как: общественная песня getSong (int idx) Благодарим вас в ожидании ваших ответов!

Ответ 1

Если вам действительно нужно использовать массив (а не ArrayList или LinkedList), это решение может быть для вас правильным:

public class Library{

    private Song[] arr = new Song[10];
    private int songNumber = 0; //the number of Songs already stored in your array

    public void addSong(Song s){
        arr[songNumber++] = s;
    }
}

Если вы хотите избежать выполнения, если вы добавите более 10 песен:

public void addSong(Song s){
    if(songNumber<10)
    {
       arr[songNumber++] = s;
    }else{
       //what to do if more then 10 songs are added
    }
}

Ответ 2

Существует несколько способов выполнить это.

Логика, которую вы используете, более или менее нормально.

Но что вы здесь делаете:

public void addSong(Song s){
    for(int i=0; i<10; i++)
        arr[i] = s;
}

Заполняет весь массив Songs той же песней, возможно, это было бы лучше:

public void addSong(Song s, int index){
        arr[index] = s;
}

Конечно, если вы передадите отрицательный индекс или индекс больше 9, у вас будут проблемы.

Ответ 3

Используйте ArrayList вместо массива. Таким образом, вы можете использовать функцию ArrayList.add() для добавления в конец вашего массива и функцию ArrayList.get(int index), чтобы получить запись массива в индексе index.

public class Library{

    ArrayList<Song> arr = new ArrayList<Song>();

    public void addSong(Song s){
        arr.add(s);
    }

    public Song getSong(int index){
        return arr.get(index);
    }
}

Ответ 4

Чтобы расширить ответ Vacation9s:

ArrayList<Song> songArray = new ArrayList<Song>();

public void addSong(Song s){
    songArray.add(s);
}