11

取り組んでいる宿題の問題について助けが必要です。Song オブジェクトの配列を含む "Library" クラスを作成する必要があります (容量 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;
    }
}

私の質問は: 配列を埋める別の方法はありますか? 後でインデックス値に基づいて曲を検索する必要があります。したがって、次のようなメソッドを作成します: public Song getSong(int idx) 回答をお待ちしております。

4

4 に答える 4

4

(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
    }
}
于 2013-07-31T22:47:28.723 に答える
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 より大きいインデックスを渡すと、問題が発生します。

于 2013-07-31T22:42:11.073 に答える
1

配列の代わりにArrayListを使用します。このようにして、関数を使用ArrayList.add()して配列の末尾に追加し、関数を使用ArrayList.get(int index)して 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);
    }
}
于 2013-07-31T22:41:57.827 に答える
0

Vacation9sの回答を拡張するには:

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

public void addSong(Song s){
    songArray.add(s);
}
于 2013-07-31T22:44:07.527 に答える