Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: camoay en 01 de Septiembre 2016, 15:48
-
Solución planteada al ejercicio CU00666B del curso de programación orientada a objetos con lenguaje Java.
Uso 3 clases:
Clase EntradaDeTeclado:
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:
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:
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
}
-
Estaba revisando tu código imprime todo bien pero no es la forma que pide el ejercicios del enunciado poque dice.
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.
-
Y lo import que hiciste en tu main a que se refiere no es necesario.
-
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.
-
Muchas gracias por las correcciones. Les vuelvo a adjuntar el código corregido y espero sus comentarios. Gracias anticipadas.
EntradaDeTeclado.java
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
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
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
-
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.
-
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 :
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