Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: javalopez en 18 de Junio 2015, 02:36

Título: ¿se debe usar un índice numérico con un for extendido java? Ejercicio CU00666B
Publicado por: javalopez en 18 de Junio 2015, 02:36
Buenas noches, aquí les dejo el código de mi ejercicio...

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

public class ListaCantantesFamosos{
    private String nombreCantante;
    private ArrayList<String> listanombres;

    public ListaCantantesFamosos(String nombreCantante) {//construcor que recibe parametro desde main
        listanombres.add(nombreCantante);
    }

    public ListaCantantesFamosos(){ //constructor
        listanombres=new ArrayList<String>();
        listanombres.add("Bruce Dickinson");
        listanombres.add("Axel Rose");
        listanombres.add("Chaqueño Palavecino");
    }

    public void addNombre (String valorNombre) //Metodo para agregar nombres
    { listanombres.add (valorNombre); }

    public void ingresaCantantesFamosos(){
        Scanner escaner = new Scanner(System.in);
        nombreCantante = escaner.nextLine();

    }

    public void listarCantantes () {
        int i=0;
        for (String nombre: listanombres)
        {
            System.out.println ("Cantante " +(i+1)+": "+nombre);
            i++;
        }
    }
   
    public String getNombreCantante(){return nombreCantante;}
}


Código: [Seleccionar]
import java.util.Scanner;
public class TestListaCantantesFamosos{

    public static void main (String [ ] args) {

        Scanner entradaEscaner = new Scanner(System.in);
        String entradaTeclado="";
        ListaCantantesFamosos listaCantantes = new ListaCantantesFamosos();
        System.out.print("\f");
        System.out.println("La lista de cantantes famosos es la siguiente:");
        listaCantantes.listarCantantes();
        System.out.println ("Por favor introduzca un nombre de cantante famoso:");
        listaCantantes.ingresaCantantesFamosos();
        listaCantantes.addNombre(listaCantantes.getNombreCantante());

        System.out.println("La lista de cantantes famosos es la siguiente:");
        listaCantantes.listarCantantes();//metodo que lista mediante un for extendido
        System.out.println("Desea introducir otro cantante presione \"S/N\"");
        entradaTeclado = entradaEscaner.nextLine();
        do{
            if(entradaTeclado.substring(0, 1).equalsIgnoreCase("s")){
                System.out.println ("Por favor introduzca un nombre de cantante famoso:");
                listaCantantes.ingresaCantantesFamosos();
                listaCantantes.addNombre(listaCantantes.getNombreCantante());
                System.out.print("\f");
                System.out.println("La lista de cantantes famosos es la siguiente:");
                listaCantantes.listarCantantes();
                System.out.println("Desea introducir otro cantante presione \"S/N\"");
                entradaTeclado = entradaEscaner.nextLine();
            }
            else if(entradaTeclado.substring(0, 1).equalsIgnoreCase("n")){       
            }
            else{
                System.out.println("La opción elegida es incorrecta!!!");
                System.out.println("Desea introducir otro cantante presione \"S/N\"");
                entradaTeclado = entradaEscaner.nextLine();
            }
        }
        while(!entradaTeclado.substring(0, 1).equalsIgnoreCase("n"));
        System.out.println("Fin del programa!!!");
    } //Cierre del main
} //Cierre de la clase

Saludos y gracias por las correcciones y consejos, Ariel
Título: Re:¿se debe usar un índice numérico con un for extendido java? Ejercicio CU00666B
Publicado por: Alex Rodríguez en 22 de Junio 2015, 21:21
Hola, tu código en general está bien.

Hay una cosa que no entiendo ¿Para qué tienes un atributo private String nombreCantante en la clase ListaCantantesFamosos? La clase representa una lista de nombres de cantantes famosos, no se ve lógico que tenga un atributo nombreCantante.


En la clase ListaCantantesFamosos usas esto:

Código: [Seleccionar]
       int i=0;
        for (String nombre: listanombres)
        {
            System.out.println ("Cantante " +(i+1)+": "+nombre);
            i++;
        }

En otros hilos del foro ya se ha comentado que si se usa un for de este tipo normalmente no se usan índices numéricos. En caso de usar índices numéricos es preferible usar un for tradicional.

Hay una cosa que podrías mejorar, te lo planteo como ejercicio. En la clase TestListaCantantesFamosos hay código en cierta medida repetido (para pedir que se introduzca un cantante famoso). La idea sería eliminar la repetición creando un método denominado pedirNombreCantanteFamoso que se encargue de pedir el nombre y devolver un String.

Saludos