Autor Tema: Ayuda Ejercicio CU00666B comparar objetos con equals java  (Leído 4429 veces)

jogonzalezmor

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 26
    • Ver Perfil
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
Código: [Seleccionar]
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:
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("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:

Código: [Seleccionar]
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...
« Última modificación: 31 de Agosto 2014, 11:11 por Alex Rodríguez »

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 393
    • Ver Perfil
Re:Ayuda Ejercicio CU00666B
« Respuesta #1 en: 01 de Agosto 2014, 09:49 »
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

jogonzalezmor

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 26
    • Ver Perfil
Re:Ayuda Ejercicio CU00666B
« Respuesta #2 en: 01 de Agosto 2014, 12:51 »
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!!!

dongo

  • Intermedio
  • ***
  • Mensajes: 177
    • Ver Perfil
Re:Ayuda Ejercicio CU00666B
« Respuesta #3 en: 01 de Agosto 2014, 14:31 »
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:

Código: [Seleccionar]
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:

Código: [Seleccionar]
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:

Código: [Seleccionar]
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 ).



« Última modificación: 01 de Agosto 2014, 16:10 por dongo »

 

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