2016-07-24 85 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 Ÿ去找他们。除非你与他们有联系(你可以访问的对象的归档,一个类的静态字段,单例类),否则你不能使用它们,并且它们将最终收集垃圾。 –

相关问题