Autor Tema: ArrayList y bucle while en entorno de aprendizaje BlueJ Java recorrido CU00666B  (Leído 2923 veces)

LuisM

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 131
    • Ver Perfil
Hola a todos !!! paso a dejar el código del ejercicio CU00666B del curso básico de aprendizaje Java con BlueJ, con modificaciones en la clase EntradaDeTeclado. Se agregó la entrada de numeros, se anuló pedirEntrada en el constructor. Falta la captura de errores pero todavía no llegamos a ese tema en el curso.

Desde ya muchas gracias

Saludos Luis


Clase Test (main)

Código: [Seleccionar]
//Test del for extendido ejemplo aprenderaprogramar.com
public class Test {
    public ListaCantantesFamosos cantantes;
    public EntradaDeTeclado entrada;
    public static void main (String [] Args) {
       int opcion=0; 
       ListaCantantesFamosos cantantes = new ListaCantantesFamosos();
       EntradaDeTeclado entrada = new EntradaDeTeclado();
       while (opcion!=3) {
       System.out.println (" 1- agrega un cantante famoso");
       System.out.println (" 2- lista los cantantes famosos");
       System.out.println (" 3- finaliza");
       System.out.println (" Ingrese Opcion");
       entrada.pedirNumero();
       opcion = entrada.getNumero();
        switch (opcion) {
            case 1:
                System.out.println ("Ingrese un nombre de Cantante");
                entrada.pedirEntrada();
                cantantes.addNombre(entrada.getEntrada());
            break;
           
            case 2:
                cantantes.listaNombres();
            break;

            case 3:
                System.out.println ("El programa ha finalizado");
            break;
       
            default:
            break;
        } //Cierre del switch
       System.out.println ("-------------------------------");
       } // cierre del while
    }//finalizacion main
} //Cierre de la clase



Clase EntradaDeTeclado (modificada)

Código: [Seleccionar]
import java.util.Scanner; //Importación del código de la clase Scanner desde la biblioteca Java
// Definimos una clase EntradaDeTeclado aprenderaprogramar.com
public class EntradaDeTeclado {
    private String entradaTeclado; //Variable de instancia (campo) de la clase
    private int entradaNumero;
    public EntradaDeTeclado ()  { //Constructor
        entradaTeclado="";
        entradaNumero=0;
     //   pedirEntrada(); //Esto es una llamada a un método interno. Al crear un objeto ejecutamos el método
    } //Cierre del constructor
    public void pedirEntrada ()  {  //Método de la clase         
        Scanner entradaEscaner = new Scanner (System.in);
        entradaTeclado = entradaEscaner.nextLine ();
        } //Cierre del método pedirEntrada
    public void pedirNumero (){
        Scanner entradaEscaner = new Scanner (System.in);
        entradaNumero = entradaEscaner.nextInt ();
    }
    public String getEntrada () { return entradaTeclado; } //Cierre del método getEntrada

    public int getNumero() {return entradaNumero;}
   
    public String getPrimeraPalabra ()  {
               for (int i=0; i < entradaTeclado.length() - 1; i++) {
            if (entradaTeclado.substring (i, i+1).equals(" ") ) {     //IMPORTANTÍSIMO: COMPARAMOS CON EQUALS
                return entradaTeclado.substring(0, i+1);         }
        }
        return entradaTeclado;  //Caso de que no se detecte ningún espacio devolvemos lo que haya
    } //Cierre del método getPrimeraPalabra

    public int getLongitud ()  {  //Método de la clase
        return entradaTeclado.length();
    } //Cierre del método getLongitud

} //Cierre de la clase


Clase ListaCantantesFamosos

Código: [Seleccionar]
//Ejemplo de uso ArrayList aprenderaprogramar.com
import java.util.ArrayList; //Los import deben ir siempre al principio antes de declarar la clase
//Esta clase representa una lista de nombres manejada con la clase ArrayList de Java
public class ListaCantantesFamosos {
    private String nombreDeLaLista; //Establecemos un atributo nombre de la lista
    private ArrayList<String> listadenombres; //Declaramos un ArrayList que contiene objetos String

    public ListaCantantesFamosos() {    //Constructor: crea una lista de nombres vacía
        nombreDeLaLista = "Cantantes Famosos";
        listadenombres = new ArrayList<String>(); //Creamos el objeto de tipo ArrayList
        addNombre("Cantante famoso 1");
        addNombre("Cantante famoso 2");
        addNombre("Cantante famoso 3");
    } //Cierre del constructor

    public void addNombre (String valor_nombre) {
        listadenombres.add (valor_nombre);
    } //Cierre del método

    public String getNombre (int posicion) { //Método
        if (posicion >= 0 && posicion < listadenombres.size() ) {
            return listadenombres.get(posicion); }
        else { return "No existe nombre para la posición solicitada";}
    } //Cierre del método 

    public int getTamaño () { return listadenombres.size(); } //Cierre del método

    public void removeNombre (int posicion) {  //Método
        if (posicion >= 0 && posicion < listadenombres.size() ) {
            listadenombres.remove(posicion); }
        else { } //else vacío. No existe nombre para la posición solicitada, no se ejecuta ninguna instrucción
    } //Cierre del método removeNombre
   
    public void listaNombres () {  //Método
        int i = 0;
        System.out.println ("Los cantantes famosos son: ");
        for (String nombre:listadenombres) {System.out.println ((i+1)+".- " +getNombre(i));i++;};
    } //
} //Cierre de la clase
« Última modificación: 22 de Junio 2017, 18:23 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola LuisM

[Repito] Por favor, si creas temas en el foro, ponle un título adecuado siguiendo las indicaciones que se dan en https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0

Es conveniente que trates no solo de que el código sea correcto, sino que esté bien presentado, espaciado, indentado, etc. Para ello en los editores suele haber una opción de formateado. Por ejemplo en BlueJ en el menú Edit la opción AutoLayout. No obstante, por ejemplo dejar espacio entre dos métodos es algo que debes hacer manualmente tú y que mejora la presentación.

Usas un índice con un for extendido en for (String nombre:listadenombres) {System.out.println (( i+1 )+".- " +getNombre( i ));i++;};

Te aconsejo leer esto: https://www.aprenderaprogramar.com/foros/index.php?topic=3210.msg14220#msg14220

En la clase con el main tienes esto:

public class Test {
    public ListaCantantesFamosos cantantes;
    public EntradaDeTeclado entrada;

Realmente esta declaración de atributos sobra en la clase Test. La clase Test aquí no tiene sentido que la declares con estos atributos public. Es más, si eliminas esas líneas el programa se ejecuta igualmente y con el mismo resultado. Debes evitar dejar partes de código inservible en tus programas.

De resto el código me ha parecido bien. Una cosa que me ha gustado es tu diseño de la clase con el main, es simple, compacto y efectivo

Saludos

 

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".