2016-07-24 169 views
-1

我有一個歌類(字段:字符串名稱)和一個相冊類(初始化Arraylist填充歌曲對象),我添加一個方法(addSongAlbum(字符串名稱參數))首先檢查歌曲是否已經在專輯中。一切正常,但現在我想檢查歌曲是否存在於專輯之外。考慮到該方法的輸入是一個字符串,我該如何做到這一點?檢查對象是否存在,使用字段字符串

public void addSongToAlbum(String name){ 
    if(checkExist(name) == null){ 
     album.add(checkExist(name)); 
     System.out.println("Song "+name+" was successfully added"); 
    } else { 
     System.out.println("This song is already in the album"); 
    } 
} 

private Song checkExist(String name){ 
    for(int i=0; i<album.size(); i++){ 
     if(name.equals(album.get(i).getName())){ 
      return album.get(i); 
     } 
    } 
    return null; 
} 
+0

代碼是值得1024個字,請創建一個[MCVE。 –

+0

我不你真的很明白你的問題,你想找到你的歌曲已經添加在哪張專輯中嗎? – Germain

+0

看看你的代碼的第2行和第3行,考慮你實際上通過'album.add'添加了什麼。 – CollinD

回答

1

我想創建一箇中央Songmanager對象是提供給用歌聲工作的所有對象,像這樣

public class SongManager { 

    private static SongManager sMan; 

    private Map<String, Song> songs = new HashMap<String, Song>(); 

    public static SongManager getInstance() { 
     if (sMan == null) { 
      sMan = new SongManager(); 
     } 
     return sMan; 
    } 

    public void addSong(Song s) { 
     songs.put(s.getName, s); 
    } 

    public Song getSong(String name) { 
     return songs.get(name); 
    } 

} 

歌曲可以是簡單的容器類,像這樣

public class Song { 

private String name; 

public void setName(String name) { 
    this.name = name; 
} 

public String getName() { 
    return name; 
} 

}

您可以通過致電SongManager.getInstance(). Create a simple container class for songs all existing Songs to this Manager and in your addSong Method, simply call the getSong`方法來查看該歌曲是否存在,隨處訪問此管理器。

P.s.我知道我在這裏使用Singleton模式是非常controversal(見例如What is so bad about singletons?,但對我來說這裏是最簡單的工作方案。

1

你需要有所有Song對象的List地方。或者在構建時將它們添加到靜態List(您將需要記住在不再用於讓內存被垃圾收集時將其刪除),或者在所有對象中都有一個類似的List然後在那些對象中進行搜索。如果你想檢查全部Song創建的對象,第二個是有用的,如果你只想檢查在專輯中的對象,第二個是有用的。

+0

這很有道理,所以我必須將它們組合在一些內容中,然後去思考這個問題,沒有辦法檢查所有已創建的類(對不起,如果問題是編程中的新的愚蠢,只是想確定) – Noobest

+0

是的,你需要一個WA Ÿ去找他們。除非你與他們有聯繫(你可以訪問的對象的歸檔,一個類的靜態字段,單例類),否則你不能使用它們,並且它們將最終收集垃圾。 –

相關問題