es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Uso del operador ListOperator en métodos.

No sé cómo puedo compartir todos mis códigos o clases para explicar qué está mal. Pero voy a intentar con esta pequeña parte. Tengo una Linkedlist que es de tipo Video. Y quiero reproducir el siguiente vídeo. Con este método. En un bucle de switch-case.

Cada vez que presiono “1” quiero ver el siguiente elemento de LinkedList hasta el final de la lista. El problema es cuando hago las iteraciones en el bucle de switch-case, funciona. Pero cuando intento crear un nuevo método e intento llamar a ese método. Los métodos funcionan y terminan en ese alcance, por lo que no recuerda dónde estaba la iteración. Por lo tanto, no funciona. El caso 1 funciona, el caso 2 no funciona. ¿Cómo puedo solucionar esto? Y espero que puedas entender lo que está mal. Disculpe por mi inglés.

Código:

“`java
public static void playTheList(LinkedList<video> video) {

<pre><code>Scanner sc = new Scanner(System.in);
System.out.println("Elección: ");
int elección = sc.nextInt();
boolean out = false;

while (!out) {
switch (elección) {
case 1:
if (iterator.hasNext()) {
Video primerVideo = iterator.next();
System.out.println("****");
System.out.println("Reproduciendo nombre del video: " + primerVideo.getNombreDelVideo() + " Longitud del video: " + primerVideo.getLongitudDelVideo());

} else {
System.out.println("Fin de la lista");
}
break;

case 2:
playNextVid(videoList);
break;

case 3:
out = true;
break;
}
}
</code></pre>

}

public static void playNextVid(LinkedList<video> video) {

<pre><code>ListIterator<videos> iterator = video.listIterator();

if (iterator.hasNext()) {
Video primerVideo = iterator.next();
System.out.println("****");
System.out.println("Reproduciendo nombre del video: " + primerVideo.getNombreDelVideo() + " Longitud del video: " + primerVideo.getLongitudDelVideo());

} else {
System.out.println("Fin de la lista");

}
</code></pre>

}
“`

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema del método playNextVid es que crea un nuevo ListIterator en cada llamada, lo que significa que comienza a iterar desde el principio de la lista cada vez. Para solucionar esto, puedes pasar el objeto ListIterator al método playNextVid como parámetro, de modo que recuerde dónde se quedó. Aquí tienes una versión actualizada del método playNextVid:

    public static void playNextVid(ListIterator<video> iterator) {
        if (iterator.hasNext()) {
            Video nextVideo = iterator.next();
            System.out.println("****\nReproduciendo video Nombre: " + nextVideo.getVideoName()
                    + "\nDuración del video: " + nextVideo.getVideoLength());
        } else {
            System.out.println("Fin de la lista");
        }
    }
    

    Y llamarías a este método desde el caso de cambio de la siguiente manera:

    case 2:
        if (iterator.hasNext()) {
            playNextVid(iterator);
        } else {
            System.out.println("Fin de la lista");
        }
        break;
    

    De esta manera, el mismo objeto ListIterator se utiliza en los métodos playTheList y playNextVid, y recuerda su posición en la lista.

Comments are closed.