2016-04-04 27 views
0

コンテキスト:音楽アルバムを格納するプログラムを作成しようとしています。Java:ArraryList、同じインスタンス変数を持つ要素の数を数える方法は?

だから私は「アルバム」と呼ばれるオブジェクトを作成した、次のようにデフォルトのコンストラクタは次のとおりです。

public Album(String artist, String title, int trackCount){ 
    this.artist = artist; 
    this.title = title; 
    this trackCount = trackCount 
    status = null 
} 

変数statusは3つの可能ステータスを参照:

AVAILABLE。壊れた;行方不明

私はその後のArrayListをした:

... 
public class AlbumList(){ 
    albumList = new ArrayList<Album>(); 
} 

私は.size()方法は私のリストの要素数を返すことを知っています。

しかし、リストにないアルバムの数がわかりません。

変数を作成する必要があると考えていましたが、ifステートメントを使用して配列を調べ、ステータスがMISSINGのアルバムが見つかるたびにインクリメントmissingAlbumsを増やしてください。私はこれをどうやって行うのか完全にはわからないが。

public int numberOfMissingAlbums(){ 
    missingAlbums= 0; 
    for(Album missingRecord: AlbumList){ 
     if(missingRecord.status.equals("MISSING")){ 
      missingAlbums++; 
     } 
    } 
    return missingAlbums; 
} 

私は」互換性のない型に.equalsを言って、エラーを取得しています、と私は問題が何であるか見当がつかない:ここ

は、私が持っているコードです。

何か助けていただければ幸いです。

+4

はい、それです。それをやってみると、具体的な質問があれば、試したコードでここに戻ってください。 –

+1

サイドバーの質問:単なるカウントではなく、不足しているアルバムのリストを持つ方が良いのではないでしょうか? 'List.size()'を使ってそこからカウントを得ることができます。 1つの石で2羽の鳥。 – robotlos

答えて

1

を返すメソッドを使用することを提案します。行方不明のアルバムの:

public static List<Album> getMissingAlbums(List<Album> currentAlbums) { 
    List<Album> missingAlbums = new ArrayList<>(); 

    for (Album currAlbum : currentAlbums) { 
     if (currAlbum.status.equals("MISSING")) { 
      missingAlbums.add(currAlbum); 
     } 
    } 

    return missingAlbums; 
} 

あなたがそのようにようにそれを呼び出すことができます。

List<Album> missingAlbums = getMissingAlbums(albumList); 

そしてそうのようList.size()でカウントを取得:

int missingAlbumCount = missingAlbums.size(); 

は今、あなたはそのアルバムの両方を持っています欠落しているアルバムの数、

+0

ありがとう!互換性のない型の.equalsというエラーが出ていますが、何が問題なのかわかりません。なぜこれが問題になるのかという考えはありますか? – Maitiu

+0

@Maitiuは 'ステータス' '文字列'ですか?もしそうなら、それはうまくいくはずです。 – robotlos

+0

@Maitiu、もしあなたが 'String getStatus()'メソッドを持っていれば、代わりにそれを使うことができます。だから、 ''( ''^')が 'albumStatus'型の' ' – robotlos

8

要素を繰り返して、アルバムが見つからないかどうかを確認してください。もしそうなら、missingAlbumsを増やしてください。あなたは、Java 8を使用している場合

、あなたはまた、このようにストリームを使用することができます:missingAlbums = albumList.stream().filter(album -> album.getStatus() == MISSING).count()

2

あなたはこの

int count = 0; 
    for (int i = 0; i < albumList.size; i++) { 
     if (albumList.get(i).equals("MISSING")) { 
      count++; 
     } 

    } 
1

ような何かを試みることができる欠落しているトラックの数が必要になるだろう何かあれば繰り返し計算されるため、失われたアルバムの数も格納するラッパークラスをarraylistの周りに作成する方が良いでしょう。毎回リストを繰り返すのではなく、リストに不足しているアルバムが追加された場合は、これを増やすことができます。このような

何か:

public class Albums { 

    List<Album> albums; 
    int missing; 

    public Albums() { 
     albums = new ArrayList<>(); 
     missing = 0; 
    } 

    public void add(Album album) { 
     albums.add(album); 
     if (albums.getStatus().equals("MISSING") { 
      missing++; 
     } 
    } 

    public int getMissingAlbums() { 
     return missing; 
    } 
} 
1

あなたはその後、

int missingAlbums = 0; 
albumList = new ArrayList<Album>(); 
Iterator itr = albumList.iterator(); 
while(itr.hasNext()){ 
    Album temp = (Album)itr.next(); 
    if(temp.status.equals("MISSING")) 
    missingAlbums++; 
} 
System.out.println(missingAlbums); 

OR各ループ

ために使用してそれをインクリメントするすべての要素を反復処理し、オブジェクトを取得し、それが MISSINGであれば、ステータスを見つけることができます
int missingAlbums= 0; 
albumList = new ArrayList<Album>(); 
for(Album temp : albumList){ 
    if(temp.status.equals("MISSING")) 
    missingAlbums++; 
} 
System.out.println(missingAlbums); 
関連する問題