Autor Tema: Errores de diseño en código Java cuando se está aprendiendo: diseño y + CU0666B  (Leído 1807 veces)

ronal.d87

  • Principiante
  • **
  • Mensajes: 72
    • Ver Perfil
Propuesta de solución al ejercicio CU0666B del curso básico de programación Java de aprenderaprogramar.

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)

Clase Test

Código: [Seleccionar]
package ejemplo01;

import java.util.Scanner;

/**
 *
 * @author Ronnie
 */
public class TestListaCantantes66B {
    public static void main(String[] args) {
            ListaCantantesFamososCU00666B listado = new ListaCantantesFamososCU00666B();
        int j = 0;   
        int k = 0;
        String cantante, opcion;       
        Scanner nombre = new Scanner(System.in);
        Scanner sc = new Scanner(System.in);       
         
        System.out.println("Listado de cantantes actual");       
         for(String nombres: listado.listaCantantes){
             System.out.println((j+1)+": "+nombres);
             j++;
         }
         do{
             System.out.println("Ingrese nombre cantante:");
             cantante = nombre.nextLine();
             listado.agregarNombre(cantante);
             System.out.println("La nueva lista es");
             if(k==0){
                 for (String nombres: listado.listaCantantes){
                     System.out.println((k+1)+": "+nombres);
                     k++;
                 }
                 }else{
                 k =0;
                 for(String nombres: listado.listaCantantes){
                     System.out.println((k+1)+": "+nombres);
                     k++;
                 }
             }
             System.out.println("Desea volver a introducir otro cantante: s/n");
             opcion = sc.nextLine();
         }
         while(opcion.equalsIgnoreCase("s"));
    }         
}


Clase Lista Cantantes Famosos

Código: [Seleccionar]
package ejemplo01;
import java.util.ArrayList;
/**
 *
 * @author Ronnie
 */
public class ListaCantantesFamososCU00666B {
   
    ArrayList <String> listaCantantes;
    String nombreCantante;

    public ListaCantantesFamososCU00666B() {       
        listaCantantes = new ArrayList<String>();
        listaCantantes.add("Juan");
        listaCantantes.add("Diego");
        listaCantantes.add("Maria Angel");       
    }
   
    public void agregarNombre(String nommbreCantante ){
        listaCantantes.add(nommbreCantante);
    }
   
    public String obtenerNombre (int posicion){
       
       
        if(posicion >= 0 && posicion<listaCantantes.size()){
            return listaCantantes.get(posicion);
        }else{
            return "no hay nombres";
        }
    }   
}
« Última modificación: 02 de Agosto 2019, 23:18 por Ogramar »
Ronald Mosquera Mancilla

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Buenas, para quien revise este ejercicio, hay varias cosas incorrectas en cuanto a que no se adapta a las propuestas del curso y/o a los estándares habituales adoptados por convención en la programación Java.

En la clase ListaCantantesFamososCU00666B hay un atributo String nombreCantante; que no tiene mucho sentido, de hecho ni siquiera es utilizado (por tanto, sobra).

Otro incumplimiento de las propuestas del curso es no declarar los atributos de clase con el modificador private. Debería usarse private ArrayList <String> listaCantantes; en lugar de ArrayList <String> listaCantantes;

Y derivado de lo anterior, deberían usarse métodos get en lugar del acceso directo a atributos (como se hace por ejemplo en la clase test donde se invoca listado.listaCantantes

Otra cosa de diseño poco acertado es en la clase test usar el bucle for-each con el condicional if (k==0). Esto es una complicación innecesaria para el código.

Puede verse una solución correcta de este ejercicio en https://aprenderaprogramar.com/foros/index.php?topic=2262.0

Salu2

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".