Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: jogonzalezmor en 31 de Julio 2014, 12:45
-
Estimados.
Tengo el siguiente problema con este ejercicio.
Es casi igual al del ejercicio CU00665B, solo que agregué algunas lineas para realizar lo solicitado, pero al compilar, no me deja ingresar otro cantante luego del primero.
Alguien me podría decir que va mal? T_T :'( :'( :'(
Código de la lista de cantantes
import java.util.ArrayList;
//Creamos la Clase Lista de cantantes famosos
public class ListaCantantesFamosos
{
private String cantantesFamosos;
private ArrayList<String>listadecantantes = new ArrayList<String>();
public ListaCantantesFamosos(String nombreCantante)
{
cantantesFamosos = nombreCantante;
listadecantantes = new ArrayList<String>();
//dentro del constructor agregamos los nombres de los 3 cantantes que se inicializarán al comienzo
//del programa.
listadecantantes.add("Luis Andrés");
listadecantantes.add("María José");
listadecantantes.add("Fernanda Rodríguez");
}//Fin del constructor
//Creamos el método para agregar cantantes
public void addCantante(String valor_NombreCantante){listadecantantes.add(valor_NombreCantante);}
public String getCantante(int posicion){
if(posicion >= 0 && posicion < listadecantantes.size()){
return listadecantantes.get(posicion);
}else {return "No existe cantante para la posición solicitada";
}//Fin del if
}//Cierre del método
public int getTamano(){return listadecantantes.size();}//Cierre del método
public void removeCantante(int posicion){
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
public void muestraLista(){
//Utilizamos un for que verificará el tamaño del ArrayList y así nos muestre la cantidad de Cantantes Ingresados
int i = 0;
System.out.println("Los cantantes de la lista son: ");
for(String cantante:listadecantantes){
System.out.println((i+1)+ ".- " + cantante);
i++;}//Cierre del for
if (i==0){
System.out.println("La lista está vacía");
}//Cierre del if
}//Cierre del método
}//Fin de la clase
Código de entrada de teclado:
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("j") ) { //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
Código de test de lista de cantantes:
import java.util.ArrayList;
//Creamos la clase para probar el ArrayList de Cantantes Famosos
public class TestListaCantantes
{
//Utilizamos el mismo main del ejercicio anterior, sólo midificamos para que nos solicite dos entradas de teclado, y no 3
public static void main(String[]args){
System.out.println("Empezamos el programa");
ListaCantantesFamosos cantantes = new ListaCantantesFamosos("Cantantes introducidos por usuario");
cantantes.muestraLista();
System.out.println("Por favor introduzca el nombre de un cantante"); EntradaDeTeclado entrada1 = new EntradaDeTeclado();
cantantes.addCantante(entrada1.getEntrada());
System.out.println("La lista ha quedado formada por " + cantantes.getTamano() + " elementos");
cantantes.muestraLista();
boolean cantanteAdicional = true;
while(cantanteAdicional==true){
System.out.println("Desea ingresar el nombre de un cantante adicional? ");
System.out.println("S = Si / N = No");
EntradaDeTeclado respuesta = new EntradaDeTeclado();
respuesta.getEntrada();
if(respuesta.equals("s")== true || respuesta.equals("S")== true){
System.out.println("Por favor introduzca el nombre de otro cantante"); EntradaDeTeclado entrada = new EntradaDeTeclado();
System.out.println("Cantante agregado, gracias...");
cantantes.addCantante(entrada.getEntrada());
System.out.println("La lista ha quedado formada por " + cantantes.getTamano() + " elementos");
cantantes.muestraLista();
}else{
cantanteAdicional = false;
}//fin del if
}//Fin del While
System.out.println("La lista ha quedado formada por:");
cantantes.muestraLista();
}//Fin del main
}//Fin de la clase
Atento a sus comentarios, me despido.
Salu2...
-
Hola, tienes mal planteado esto:
if(respuesta.equals("s")== true || respuesta.equals("S")== true){
La expresión correcta es:
if(respuesta.getEntrada().equals("s") || respuesta.getEntrada().equals("S")){
Para entender el por qué de esto tienes que tener en cuenta:
- ¿Qué hace el método equals? ¿Es necesario un == cuando usamos equals?
- ¿Qué necesita el método equals? Si ves la documentación del api, el método equals necesita un String, y tú le estabas pasando otro tipo de objeto. Al pasarle un string ya funciona correctamente.
Saludos
-
Muchas gracias Javi...
En algún momento me salió bien, pero por algún motivo, lo borré y olvidé como lohabía hecho T_T
Ahora funciona como debería xD :3
Salu2!!!
-
Hola me llamo la atención este post, mira un par de recomendaciones, la primera para mas claridad, y la segunda para ampliar un poco la librería:
System.out.println("Por favor introduzca el nombre de un cantante"); EntradaDeTeclado entrada1 = new EntradaDeTeclado();
Intenta poner una instrucción por linea así ganarás en claridad, jeje me costo encontrar donde creabas el objeto "EntradaTeclado entrada1". Simplemente por claridad, para ti y para los demás.
Mi segunda recomendación es sobre la siguiente condición:
if(respuesta.equals("s")== true || respuesta.equals("S")== true){
Existe un método igual que equals que se llama equalsIgnoreCase( String ) que compara las dos cadenas ignorando las mayúsculas y minúsculas. Con lo cual con este método las cadenas "COCHE" , "coche", "Coche" , "CocHE" todas devolverian true si las compararamos con la cadena "coche".
En tu caso, la condición podría ser de la siguiente manera:
if(respuesta.equalsIgnoreCase("s")){
No es que el tuyo este mal, pero si te fijas con este método nos olvidamos de tener que realizar condiciones redundantes para mayúsculas y minúsculas.
Por otro lado fíjate lo que te comentan, cuando un método devuelve un valor booleano, no es necesario usar operadores.
Y nada, un saludo y espero que te sea util el metodo equalsIgnoreCase( String ).