Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Dan_SB en 08 de Abril 2015, 05:23

Título: Código ejemplo del for extendido en Java y equalsIgnoreCase Ejercicio (CU00666B)
Publicado por: Dan_SB en 08 de Abril 2015, 05:23
Buenas noches!!!

Otro dato nuevo que ver!! en mi vida había visto otro tipo de for  ???... El enunciado dice así:

Citar
Crea una clase denominada ListaCantantesFamosos que al ser inicializada contenga un ArrayList con tres Strings que sean el nombre de cantantes famosos. Crea una clase test con el método main que inicialice un objeto ListaCantantesFamosos y usando un for extendido muestre los cantantes en la lista por pantalla. Se debe pedir al usuario un nombre más de cantante famoso, y una vez introducido mostrar la lista actualizada usando un for extendido. Una vez mostrada la lista actualizada, se debe dar opción a elegir entre volver a introducir otro cantante o salir del programa (se podrán introducir tantos cantantes como se desee, para ello usa un bucle while que dé opción a elegir al usuario).


La clase Lectores para leer datos:

Código: [Seleccionar]
package ArrayObject;
import java.util.Scanner;

public class Lector {
    public String LeerCadena(){
        Scanner in = new Scanner(System.in);
        return in.nextLine();
    }
}

Clase ListaCantantesFamosos:
Código: [Seleccionar]
package ArrayObject;
import java.util.ArrayList;

public class ListaCantantesFamosos {
    ArrayList <String> cantantes;
    public ListaCantantesFamosos(){
        cantantes = new <String> ArrayList(2);
    }
   
    public void setCantante(String name){
        cantantes.add(name);
    }
   
    public int getTamaño(){
        return cantantes.size();
    }
   
    public String getCantante(int index){
        if (index >= 0 && index < cantantes.size()){
            return cantantes.get(index);
        }
        else{return "No existe cantante en esta casilla.";}
    }
   
    public void removerCantante(int index){
        if (index >= 0 && index < cantantes.size()){
            cantantes.remove(index);
        }
        else{}
    }
}


Clase test:

Código: [Seleccionar]
package ArrayObject;

public class Test {
    public static void main(String[]args){
        Lector leer = new Lector();
        ListaCantantesFamosos Lista = new ListaCantantesFamosos();
        int no = 0; String dato;
        Lista.setCantante("Ruben Blades");
        Lista.setCantante("Shakira");       
        while(no < 1){
            int si = 0;
            System.out.println("Ingresa un cantante famoso!!");
            dato = leer.LeerCadena();
            System.out.println("   ");
            Lista.setCantante(dato);
            int i = 0;
            for(String data: Lista.cantantes){
            System.out.println(i+1 + ". " + data + ".");
            i++;
        }
            System.out.println("   ");
            while(si < 1 && no < 1){
            System.out.print("Escriba \"Si\" para agregar otro artista, de lo contrario, escriba \"No\" para salir del programa: ");
            dato = leer.LeerCadena();           
            if (dato.equalsIgnoreCase("no") == true){no++;}
            else if (dato.equalsIgnoreCase("si") == true){si++; System.out.println("  ");}
            else System.out.println("Entrada Desconocida. Intentelo de nuevo.");
            }
        }
        System.out.println("Adios!!!");
        }       
    }

Su ejecución es así:

(http://i.imgur.com/UEzBdwp.png)

(http://i.imgur.com/WpvSxDT.png)

Pude haber usado variables booleanas para el si y no, en ves de esas variables enteras "Switch" tambien. Por cierto, se preguntaran, ¿Para que declare la variable i dentro del while?... era para que me pudiese salir así:

1.
2.
3.
4.
5. . .

Esta parte se podia colocar asi y funcionaba igual:

Código: [Seleccionar]
package ArrayObject;

public class Test {
    public static void main(String[]args){
        Lector leer = new Lector();
        ListaCantantesFamosos Lista = new ListaCantantesFamosos();
        int no = 0; String dato;
        Lista.setCantante("Ruben Blades");
        Lista.setCantante("Shakira");       
       [b] while(no < 1){
            int si = 0, i = 1;
            System.out.println("Ingresa un cantante famoso!!");
            dato = leer.LeerCadena();
            System.out.println("   ");
            Lista.setCantante(dato);       
            for(String data: Lista.cantantes){
            System.out.println(i + ". " + data + ".");
            i++;
        }[/b]
            System.out.println("   ");
            while(si < 1 && no < 1){
            System.out.print("Escriba \"Si\" para agregar otro artista, de lo contrario, escriba \"No\" para salir del programa: ");
            dato = leer.LeerCadena();           
            if (dato.equalsIgnoreCase("no") == true){no++;}
            else if (dato.equalsIgnoreCase("si") == true){si++; System.out.println("  ");}
            else System.out.println("Entrada Desconocida. Intentelo de nuevo.");
            }
        }
        System.out.println("Adios!!!");
        }       
    }

Solo quería ver exactamente que significaba el "i+1" jugando un poco. jajaja!!

Cualquier corrección no duden en decírmelo!
Título: Re:Ejercicio (CU00666B), El for extendido!
Publicado por: toni_apr en 09 de Abril 2015, 00:07
Hola Dan

En tu ejercicio cumples las peticiones del enunciado gestionando la lista de cantantes famosos. Bien.

Dan, voy a comentar detalles de tu código para que puedan mejorar si cabe.

Tu clase Lector, es sencilla y operativa al 100%, no tiene ningún defecto. Es posible que hayas oido hablar de las convenciones a la hora de bautizar los métodos en Java.
Siguiendo esa convención tu método:
    LeerCadena()
debería llamarse:
    leerCadena()
----
En tu clase ListaCantantesFamosos la siguiente instrucción:
    cantantes = new <String> ArrayList(2);
provoca un warning, que se elimina al remodelarla así:
    cantantes = new  ArrayList<String>(2);

Tienes en esta clase un método:
    setCantante(String name)
que parece un setter cuando no lo es, sería mejor llamarlo
    añadirCantante, addCantante, incluirCantante, o algo por el estilo indicando que su tarea es esa, añadir un nuevo cantante.
----
En la clase Test creas la instancia 'Lista' de tipo ListaCantantesFamosos que siguiendo la convención camelCase debería llamarse 'lista'

El siguiente código:
Código: [Seleccionar]
            int i = 0;
            for(String data: Lista.cantantes){
                System.out.println(i+1 + ". " + data + ".");
                i++;
            }
aunque escueto, debería formar parte de la clase ListaCantantesFamosos pues manipula datos de esa clase. Por cierto el atributo de esa clase 'cantantes' debería ser private y no ser accesible directamente desde la clase Test.

En esta clase, la variable 'si' se inicializa en cada bucle y no toma parte en ninguna decisión del código, si fuera eliminada, el programa funcionaria exactamente igual.

Saludos
Título: Re:Ejercicio (CU00666B), El for extendido!
Publicado por: Dan_SB en 09 de Abril 2015, 02:12
Copiado sus comentarios, muchisimas gracias!!