2016-04-04 19 views
0

Bağlam: Müzik albümlerini depolayacak bir program yazmaya çalışıyorum.Java: ArraryList, aynı örnek değişkenine sahip elemanların sayısını nasıl sayılır?

Yani 'Albüm' olarak adlandırılan bir nesne oluşturduk, varsayılan yapıcı aşağıdaki gibidir:

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

değişken status 3 olası durumları ifade eder:

MEVCUT; KIRIK; EKSİK. Ben .size() yöntem Listemde öğe sayısını döndürür biliyoruz

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

:

O zamanlar bir arraylist yaptı.

Ancak, listemde eksik olan albüm sayısını nasıl bulacağından emin değilim. Ben değişken oluşturmak gerekir düşünüyordum

, deyim dizisi geçmesi ve missingAlbums bir albüm bir durum EKSİK ile bulunursa her seferinde artırmak için eğer o zaman bu belki bir kullanmak gelen, int missingAlbums söylüyorlar. Bununla nasıl yapılacağından emin değilim. İşte

Ben kodudur:

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

Ben 'uyumsuz türlerinde .equals diyerek bir hata alıyorum ve sorunun ne olduğunu hiçbir fikrim yok.

Herhangi bir yardım için teşekkür ederiz.

+4

Evet, işte bu kadar. Bunu yapmayı deneyin ve somut bir sorunuz varsa, denediğiniz kodla buraya geri dönün. –

+1

Kenar çubuğu sorusu: Sadece sayım yerine kayıp albümlerin bir Listesinin olması daha iyi olmaz mıydı? Bundan sonra sayımı almak için 'List.size()' yi kullanabilirsiniz. 1 taş ile 2 kuş. – robotlos

cevap

1

Birdöndürecek bir yöntem kullanmayı öneririm Eksik albüm:

List<Album> missingAlbums = getMissingAlbums(albumList); 

Ve böylece gibi List.size() ile sayım sonucuna varmak:

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; 
} 

Sonra şöyle diyebilirsiniz

int missingAlbumCount = missingAlbums.size(); 

Artık Her iki albümü olduğunu eksik ve eksik olan albümlerin sayısı.

+0

Teşekkürler! “Uyumsuz türler üzerinde eşitlikler” diyen bir hata alıyorum ve sorunun ne olduğu hakkında hiçbir fikrim yok. Bunun neden bir sorun olabileceğine dair bir fikir var mı? – Maitiu

+0

@Maitiu senin durumun 'String' mi? Olursa çalışması gerekir. – robotlos

+0

@Maitiu, 'String getStatus()' yönteminiz varsa, bunun yerine kullanabilirsiniz. Yani eğer (currAlbum.getStatus(). Eşittir ("MISSING")) {' – robotlos

8

Sadece öğeler üzerinde yineleyin ve albümün eksik olup olmadığını kontrol edin. Eğer öyleyse, eksikAlbums artırın. Java 8 kullanıyorsanız

, ayrıca böyle akışları kullanabilirsiniz: missingAlbums = albumList.stream().filter(album -> album.getStatus() == MISSING).count()

2

Bu

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

    } 
1

gibi bir şey deneyebilirsiniz eksik parça sayısı ihtiyacı olacak bir şey ise Tekrar tekrar hesaplanmak için, arraylist etrafında kayıp albümlerin sayısını da kaydeden bir sarmalayıcı sınıf yapmak daha iyi bir seçenek olabilir. Bu, her seferinde listenin üzerinde yineleme yapmak yerine listeye eksik bir albüm eklendiyse bu sayıyı artırmanıza izin verir.Böyle

şey: Her eleman yineleme ve nesneyi almak ve eğer durumunu bulabilirsiniz

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

MISSING sonra artırmaz o

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); 

VEYA her döngü

için kullanmakta
int missingAlbums= 0; 
albumList = new ArrayList<Album>(); 
for(Album temp : albumList){ 
    if(temp.status.equals("MISSING")) 
    missingAlbums++; 
} 
System.out.println(missingAlbums); 
İlgili konular