Autor Tema: Ejecicio CU00666B del curso iniciación programación orientada a objetos con Java  (Leído 3530 veces)

camoay

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 44
    • Ver Perfil
Solución planteada al ejercicio CU00666B del curso de programación orientada a objetos con lenguaje Java.

Uso 3 clases:

Clase EntradaDeTeclado:
 
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

 public EntradaDeTeclado ()  { //Constructor
     entradaTeclado="";
     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 String getEntrada () { return entradaTeclado; } //Cierre del método getEntrada

 public String getPrimeraPalabra ()  {
for (int i=0; i < entradaTeclado.length() - 1; i++) {
if (entradaTeclado.substring (i, i+1).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]
import java.util.ArrayList;
public class ListaCantantesFamosos {

//Esta clase representa una lista de cantantes manejada con la clase ArrayList de Java
   private String cantanteDeLaLista;
   private ArrayList<String> listadecantantes; //Declaramos un ArrayList que contiene objetos String

   public ListaCantantesFamosos() {    //Constructor: crea una lista de 3 nombres
   listadecantantes = new ArrayList<String>(); //Creamos el objeto de tipo ArrayList
   listadecantantes.add("Elton John");
   listadecantantes.add("Enya");
   listadecantantes.add("Jon Secada");
   } //Cierre del constructor
       
   public void addNombre (String valor_nombre) {
   listadecantantes.add (valor_nombre);
   } //Cierre del método

   public String getNombre (int posicion) { //Método
       if (posicion >= 0 && posicion < listadecantantes.size() ) {
           return listadecantantes.get(posicion); }
       else { return "No existe nombre para la posición solicitada";}
   } //Cierre del método
   
   public void getAllNombres() { //Método
   int j = 0;        
       for( String cantante : listadecantantes){
       System.out.println ((j+1)+ ".- " + cantante );
       j++;
      }   
   } //Cierre del método
   
   public int getTamaño () { return listadecantantes.size(); } //Cierre del método

   public void removeNombre (int posicion) {  //Método
       if (posicion >= 0 && posicion < listadecantantes.size() ) {
       listadecantantes.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

} //Cierre de la clase

Clase TestListaCantantesFamosos:
Código: [Seleccionar]
import java.util.ArrayList;
import com.aprenderaprogramar.java.iniciacion.clase65.EntradaDeTeclado;

public class TestListaCantantesFamosos {
public static void main (String [ ] args) {
   System.out.println ("Empezamos el programa"); 
   ListaCantantesFamosos lista1 = new ListaCantantesFamosos();
   lista1.getAllNombres();
   int j = 0;
   do{
   System.out.println ("Por favor introduzca cantante o Pulse 'x' para salir:");
   EntradaDeTeclado entrada = new EntradaDeTeclado();
   System.out.println ("Gracias");
   if(j >= 1 && entrada.getEntrada().equalsIgnoreCase("x"))
      break;
   lista1.addNombre (entrada.getEntrada() );
   System.out.println ("La lista ha quedado formada por " + lista1.getTamaño() + " elementos");
   lista1.getAllNombres();
   j++;
   }while(true);
   } //Cierre del main
}
« Última modificación: 05 de Septiembre 2016, 14:42 por Alex Rodríguez »

DRANXZ88

  • Avanzado
  • ****
  • Mensajes: 356
    • Ver Perfil
Re:Java, el for extendido. Ejecicio CU00666B del curso iniciación
« Respuesta #1 en: 01 de Septiembre 2016, 23:43 »
Estaba revisando tu código imprime todo bien pero no es la forma que pide el ejercicios del enunciado poque dice.
Citar
usando un for extendido muestre los cantantes en la lista por pantalla
Y vos no usaste el for extendido para mostrar la lista de cantante. Otra cosa si es posible tenes que evitar el break en tu programa usando otra forma de resolver. A ultima instancia podes usar pero este caso es mejor usar otra forma.

DRANXZ88

  • Avanzado
  • ****
  • Mensajes: 356
    • Ver Perfil
Re:Java, el for extendido. Ejecicio CU00666B del curso iniciación
« Respuesta #2 en: 01 de Septiembre 2016, 23:45 »
Y lo import que hiciste en tu main a que se refiere no es necesario.

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola camoay, en tu código en la clase TestListaCantantesFamosos utilizas un bucle do ... while(true)

Esto se considera un mal diseño, te recomiendo leer la explicación existente en https://www.aprenderaprogramar.com/foros/index.php?topic=3074.0 (hay más hilos donde se comenta esto) y corregirlo

Saludos.

camoay

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 44
    • Ver Perfil
Muchas gracias por las correcciones. Les vuelvo a adjuntar el código corregido y espero sus comentarios. Gracias anticipadas.
EntradaDeTeclado.java
Código: [Seleccionar]
package com.aprenderaprogramar.java.iniciacion.clase65;

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

 public EntradaDeTeclado ()  { //Constructor
     entradaTeclado="";
     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 String getEntrada () { return entradaTeclado; } //Cierre del método getEntrada

 public String getPrimeraPalabra ()  {
for (int i=0; i < entradaTeclado.length() - 1; i++) {
if (entradaTeclado.substring (i, i+1).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

ListaCantantesFamosos.java
Código: [Seleccionar]
package com.aprenderaprogramar.java.iniciacion.clase66;
import java.util.ArrayList;

public class ListaCantantesFamosos {
//Declaramos un ArrayList que contiene objetos String
   private ArrayList<String> listaCantantesFamosos;

   ListaCantantesFamosos() {listaCantantesFamosos = new ArrayList<String>();}
   
   public void addNombre(String cantante) {
   listaCantantesFamosos.add(cantante);
   } //Cierre del método
   
   public void ListarTodosLosNombres( ){ 
   int i=0;
   System.out.println ("Los cantantes de la lista son: ");
   for(String nombre: listaCantantesFamosos  ){
  System.out.println((i+1)+".- "+ nombre);
  i++;
   }
   }
} //Cierre de la clase

Test.java
Código: [Seleccionar]
package com.aprenderaprogramar.java.iniciacion.clase66;
import com.aprenderaprogramar.java.iniciacion.clase65.EntradaDeTeclado;

public class Test {
public static void main(String[] args) {
// inicializamos primero con 3 nombres el arraylist
ListaCantantesFamosos lista = new ListaCantantesFamosos();
String nombre ;
String control = "s";
if(lista != null){
lista.addNombre("Jon Secada");
lista.addNombre("Peret");
lista.addNombre("Enya");
lista.ListarTodosLosNombres();
System.out.println("Introduzca otro nombre de cantante:");
EntradaDeTeclado entrada = new EntradaDeTeclado();
nombre = entrada.getEntrada();
lista.addNombre(nombre);
lista.ListarTodosLosNombres();
while(control == "s" | control == "S")
{
System.out.println("Teclee (s) si quiere añadir otro nombre de cantante ó (n) para salir");
EntradaDeTeclado entrada1 = new EntradaDeTeclado();
if (entrada1.getEntrada().equals("s")| entrada1.getEntrada().equals("S")){
System.out.println("Introduzca otro nombre de cantante:");
EntradaDeTeclado entrada2 = new EntradaDeTeclado();
nombre = entrada2.getEntrada();
lista.addNombre(nombre);
lista.ListarTodosLosNombres();
}else{
control = "n";
System.out.println("Gracias por usarme.");
}
}
  }
}//main
}//end class test

DRANXZ88

  • Avanzado
  • ****
  • Mensajes: 356
    • Ver Perfil
He visto que tu ejercicio cumple o mas bien imprime bien pero como te dijo Alex Rodriguez es mejor mas corto mas ordenada y menos código no va a necesitar tanta condicional.
« Última modificación: 16 de Septiembre 2016, 08:10 por Alex Rodríguez »

camoay

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 44
    • Ver Perfil
Hola de nuevo y muchas gracias por las correcciones. Merece la pena estrujarse mas el coco y optimizar el código. Aquí va la versión corregida del ejercicio:

La clase EntradaDeTeclado.java y ListaCantantesFamosos.java no las he modificado y valen las anteriores. Incluyo sólo la clase Test.java   :
Código: [Seleccionar]
package com.aprenderaprogramar.java.iniciacion.clase66;
import com.aprenderaprogramar.java.iniciacion.clase65.EntradaDeTeclado;

public class Test {
public static void main(String[] args) {
// definición e inicialización de variables
ListaCantantesFamosos lista = new ListaCantantesFamosos();
String nombre = "" ;
// listo todos los nombres existentes
lista.ListarTodosLosNombres();
do{// bucle que me  permite seguir añadiendo cantantes mientras no teclee "n" ó "N"
System.out.println( "nombre = "+nombre);
System.out.println("Teclee otro nombre de cantante ó (n) para salir");
EntradaDeTeclado entrada = new EntradaDeTeclado();
nombre = entrada.getEntrada();
// si nombre es "n" no me lo graba como miembro de la lista
// si no uso el condicional la "n" de salida la graba como nombre de la lista
if (nombre.equals("n") || nombre.equals("N")){
System.out.println("Gracias por usarme.");
}else{
lista.addNombre(nombre);
lista.ListarTodosLosNombres();
}
}while(!(nombre.equals("n") || nombre.equals("N")) ); // end do...while
}//end main
}//end class test

Gracias anticipadas por sus comentarios

 

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