¿Cómo puedo implementar una función para devolver cierto si matriz o arrayList se refiere a un elemento anterior?

RShome:

Una lista de reproducción es considerada una lista de reproducción repetir si alguna de las canciones contienen una referencia a una canción anterior de la lista de reproducción. De lo contrario, la lista va a terminar con la última canción que apunta a nulo.

Me necesidad de implementar una función que isRepeatingPlaylist, devuelve verdadero si una lista de reproducción se repite o falso si no lo es.

Por ejemplo, los siguientes código imprime "verdaderos" como ambas canciones apuntan el uno al otro.

Song first = new Song("Hello");
Song second = new Song("Eye of the tiger");    
first.setNextSong(second);
second.setNextSong(first);    
System.out.println(first.isRepeatingPlaylist());

Una vez más, esto no es un ejercicio de tarea, estoy haciendo desafíos de codificación, porque cuando leí teoría acerca de los conceptos de programación, casi puedo entender, pero cuando se enfrentan con la escritura de un programa que no sé por dónde empezar, o cómo se aplican.

public class Song {

    private String name;
    private Song nextSong;

    public Song(String name) {
        this.name = name;
    }

    public void setNextSong(Song nextSong) {
        this.nextSong = nextSong;
    }

    public boolean isRepeatingPlaylist() {
        //throw new UnsupportedOperationException("Waiting to be implemented.");
        List<String> list = new ArrayList<String>();
        list.add(one);
        list.add(two);
        list.add(three);
        list.add(four);

        if list.contains()
        return true;
        else
            return false;

    }

    public static void main(String[] args) {
        Song first = new Song("Hello");
        Song second = new Song("Eye of the tiger");
        Song third = new Song("a test");
        Song fourth = new Song("survivor");

        first.setNextSong(second);
        second.setNextSong(first);

        System.out.println(first.isRepeatingPlaylist();
    }
}
Henrique Sabino :

Creo que este trabajo podría:

public boolean isRepeatingPlaylist() 
{
    Set<Song> songs = new HashSet<Song>();
    songs.add(this);
    Song current = this.getNextSong();
    //if you did not implment a getter for the nextSong property I think you should
    while (current.getNextSong() != null && !songs.contains(current.getNextsong())) {

        songs.add(current);
        current = current.getNextSong();
    }

    return songs.contains(current.getNextsong()); 
}

Editar 1: Como se ha mencionado en los comentarios de esta respuesta, la ==que en algunos casos podría no ser la mejor, ya que compara la posición de la memoria de cada objeto. Con el fin de solucionar este problema, la aplicación de los métodos hashCode()y equals()se recomienda, si usted no sabe lo que son, trata de leer esto .

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=187733&siteId=1
Recomendado
Clasificación