2016-09-20 16 views
-4

この方法で何が問題になっていますか?単に曲の配列に曲を追加することになっています。ソングは重複することはできません。配列にすでに3曲がある場合は、4番目のソングを配列の3番目のインデックスに追加する必要があります。配列に文字列を追加するには?

import java.util.*; 

public class Player { 
    private String[] songs; 
    private int[] order; 
    private int numSongs; 
    private int numSongsInShuffle; 

    public Player() { 
     songs = null; 
     order = null; 
     numSongs = 0; 
     numSongsInShuffle = 0; 
    } 

    public void addSong(String name) { 
     if ((songs==null) || (numSongs==songs.length)) { 
      //expand 
      String [] temp; 
      temp = new String[2*numSongs]; 
      for (int i=0;i<songs.length;i++) 
       temp[i] = songs[i]; 
      songs = temp; 
     } 
     songs[numSongs] = name; 
     numSongs++; 
    } 
+0

私たちがあなたを助けるために十分な情報を提供していません。あなたがテストしようとしているクラス、テストクラス、そしてそれが動作しないと思う理由を提供すると助けになるかもしれません。 – tddmonkey

+0

@tddmonkey質問を終える前に私の変更を偶然保存しました。ごめんなさい。 –

+0

あなたはどんな失敗やエラーを受けていますか? 「バーが赤い」と言っても、実際の失敗に関する情報は得られません。 –

答えて

0

最初の項目に、songsがnullであるので、あなたのコードはここにNullPointerException

​​

を投げています。ヌルチェックを行ったとしても、numSongsは0になるためArrayIndexOutOfBoundsExceptionになるので、tempは空の配列になります。あなたがする必要があるのは、次のような初期化ロジックを分離することです:

public void addSong(String name) { 
    if (songs == null) { 
     // initialize array 
     songs = new String[1]; 
    } else if (numSongs == songs.length) { 
     //expand 
     songs = Arrays.copyOf(songs, 2*numSongs); 
    } 
    songs[numSongs] = name; 
    numSongs++; 
} 
関連する問題