Estás en:   ArielOrtiz.info > Estructura de datos > Iterador descendente

Iterador descendente

Objetivos

Durante esta actividad, los alumnos serán capaces de:

Esta actividad promueve las siguientes habilidades, valores y actitudes: análisis y síntesis, capacidad de resolver problemas, creatividad, y uso eficiente de la informática y las telecomunicaciones.

Descripción

Esta actividad es opcional y tiene un valor de 10% adicional en la calificación del tercer parcial. Debe ser elaborada de manera individual.

Extiende el comportamiento de la clase tc1018.util.LinkedList<E> elaborada en clase (ver código fuente) para permitir que sus instancias sean iteradas de manera descendente. Para ello debes añadirle a la clase un método con la siguiente firma:

public Iterator<E> descendingIterator()

Este método debe devolver un objeto que implemente la interfaz java.util.Iterator<E>. Dicho objeto debe permitir iterar sobre todos los elementos de la lista en orden inverso.

En la parte superior de tu archivo fuente coloca en comentarios tus datos personales. Por ejemplo:

/*--------------------------------------------------------------------
 * Actividad de programación: Iterador descendente 
 * Fecha: 21-Abr-2013
 * Autor:
 *           1166611 Pepper Pots  
 *--------------------------------------------------------------------*/

Prueba tu código usando la siguiente clase de JUnit:

package tc1018.util;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.fail;
import java.util.Iterator;
import java.util.NoSuchElementException;

import org.junit.Test;

public class TestLinkedListWithDescendingIterator {

    public static <T> Iterable<T> descendingIterable(final LinkedList<T> list) {
        return new Iterable<T>() {
            @Override
            public Iterator<T> iterator() {
                return list.descendingIterator();
            }
        };
    }

    @Test
    public void testDescendingStringIterator() {

        LinkedList<String> monthList = new LinkedList<>();
        Iterator<String> stringIterator = monthList.descendingIterator();

        assertFalse(stringIterator.hasNext());
        try {
            stringIterator.next();
            fail();
        } catch (NoSuchElementException e) {
        }

        String[] monthArray = { "January", "February", "March", "April", "May",
                "June", "July", "August", "September", "October", "November",
                "December" };

        for (String m : monthArray) {
            monthList.addLast(m);
        }

        int index = monthArray.length - 1;
        stringIterator = monthList.descendingIterator();
        while (stringIterator.hasNext()) {
            assertEquals(monthArray[index], stringIterator.next());
            index--;
        }

        try {
            stringIterator.next();
            fail();
        } catch (NoSuchElementException e) {
        }

        index = monthArray.length - 1;
        for (String m : descendingIterable(monthList)) {
            assertEquals(monthArray[index], m);
            index--;
        }
    }

    @Test
    public void testDescendingIntegerIterator() {

        LinkedList<Integer> lostNumbersList = new LinkedList<>();
        Iterator<Integer> integerIterator = lostNumbersList
                .descendingIterator();

        assertFalse(integerIterator.hasNext());
        try {
            integerIterator.next();
            fail();
        } catch (NoSuchElementException e) {
        }

        Integer[] lostNumbersArray = { 4, 8, 15, 16, 23, 42 };

        for (int i : lostNumbersArray) {
            lostNumbersList.addLast(i);
        }

        int index = lostNumbersArray.length - 1;
        integerIterator = lostNumbersList.descendingIterator();
        while (integerIterator.hasNext()) {
            assertEquals(lostNumbersArray[index], integerIterator.next());
            index--;
        }

        try {
            integerIterator.next();
            fail();
        } catch (NoSuchElementException e) {
        }

        index = lostNumbersArray.length - 1;
        for (Integer i : descendingIterable(lostNumbersList)) {
            assertEquals(lostNumbersArray[index], i);
            index--;
        }
    }
}

¿Qué se debe entregar?

Sube el archivo LinkedList.java usando el Sistema de Entrega de Tareas Automatizado. No se aceptan tareas por ningún otro medio.

Fecha límite: Domingo, 21 de abril.

Evaluación

Esta actividad será evaluada usando los siguientes criterios:

100 La actividad cumple con todos los requerimientos.
-10 No se incluyó en comentario los datos de los autores.
10 El programa fuente contiene errores sintácticos.
50-90 El programa produce algunos errores al momento de correrlo.
DA La solución es un plagio.