Autor Tema: En java los objetos no se pueden comparar usando == usar equals ejemplo CU00666B  (Leído 2326 veces)

matru

  • Sin experiencia
  • *
  • Mensajes: 41
    • Ver Perfil
A continuación la solución que planteo para el ejercicio CU00666B del curso Java desde cero.

Código: [Seleccionar]

import java.util.Scanner;

public class EntradaTeclado{

    private String entradaTeclado;//variable de instancia(campo) de la clase
   
    public EntradaTeclado(){
   
        entradaTeclado="";
        pedirEntrada();//Esto es una llamada a un metodo interno al crear un objeto automaticamente ejecutamos el metodo
    }
   
    public void pedirEntrada(){//metodo interno de la clase
   
        Scanner entradaScanner = new Scanner(System.in);
        entradaTeclado = entradaScanner.nextLine();
    }
   
    public String getEntrada(){
       
        return entradaTeclado;
    }
   
    public String getPrimeraPalabra(){
     //importante: en java los objetos no se pueden comparar usando == por eso esto no funcionara
     if(entradaTeclado.substring(0,1).equals("j")){
   
        System.out.println("Hemos detectado una j");
     }else{
   
       System.out.println("Mira esto: " + entradaTeclado.substring(0,1));
     }
   
     for(int i=0;i<entradaTeclado.length()-1;i++){
        //importante: comprarar siempre los objetos con equals
        if(entradaTeclado.substring(i,i+1).equals(" ")){
       
            return entradaTeclado.substring(0,i+1);
        }
    }
        return entradaTeclado;
   
    }//cieree del metodo primera palabra
     public int getLongitud(){
     
         return entradaTeclado.length();
         
       }//cierre del metodo longitud   
 }//cierre de la clase



Código: [Seleccionar]

import java.util.ArrayList;
/**
 * Crea una clase denominada ListaCantantesFamosos que al ser inicializada contenga un ArrayList con tres Strings que sean el nombre de cantantes famosos. Crea una clase test con el método main que inicialice un objeto ListaCantantesFamosos, pida dos cantantes famosos más al usuario, los añada a la lista y muestre el contenido de la lista por pantalla.
 */
public class ListaCantantesFamosos{

     ArrayList<String> listaCantantes;
   
    public ListaCantantesFamosos(){
 
        listaCantantes = new ArrayList<String>();
        listaCantantes.add("Don Omar");
        listaCantantes.add("Enrique Iglesias");
        listaCantantes.add("Alejandro Sanz");
    }//Cierre del contructor
   
    public void addNombre(String nombre){
   
        listaCantantes.add(nombre);
    }
   
    public int getTamano(){
   
        return listaCantantes.size();
    }
   
    public String getNombreCantante(int posicion){
   
        if(posicion >= 0 && posicion < listaCantantes.size()){
       
            return listaCantantes.get(posicion);
        }else{
       
            return "No existe nombre para la posicion solicitada";
       }
    }
   
    public void borrarNombre(int posicion){
   
        if(posicion >= 0 && posicion < listaCantantes.size()){
       
            listaCantantes.remove(posicion);
        }else{
       
             System.out.println("No Existe nombre para la posicion solicitada");
        }
    }
   
    public ArrayList<String> getListaCantantes() {
return listaCantantes;
}

public void setListaCantantes(ArrayList<String> listaCantantes) {
this.listaCantantes = listaCantantes;
}

   
   
}



Código: [Seleccionar]

public class Test{

    public static void main(String []arg){

        ListaCantantesFamosos list = new ListaCantantesFamosos();
        int i=0;
        String desicion="";
        boolean artista = true;

        System.out.println("Programa Iniciado");
        System.out.println("Lista de Cantantes Almacenados \n");
        for(String nombre: list.getListaCantantes() ){

            System.out.println(nombre);
            i++;
        }

        while(artista == true){
            System.out.println("\nInserte el Nombre del nuevo cantante \n");
            EntradaTeclado entrada1 = new EntradaTeclado();
            list.addNombre(entrada1.getEntrada());
            System.out.println("\nCantantes Almacenados \n");

            for(String nombre: list.getListaCantantes() ){
                System.out.println(nombre);
                i++;
            }
            System.out.println("\nSi desea agregar otro cantante inserte Si de lo contrario inserte No");
            EntradaTeclado entrada2 = new EntradaTeclado();
            desicion = entrada2.getEntrada();
            if(desicion.equalsIgnoreCase("Si")){

                i++;
            }else if(desicion.equalsIgnoreCase("No")){

                System.out.println("Gracias!");
                break;
            }else{

                System.out.println("La Opcion no es valida");
                break;
            }
        }
    }

}

« Última modificación: 04 de Marzo 2016, 08:24 por Alex Rodríguez »

Alex Rodríguez

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

Sobre el ejercicio en la clase EntradaDeTeclado tienes algún código sobrante, por ejemplo la parte de System.out.println("Mira esto: " + entradaTeclado.substring(0,1));

Aunque ese código no afecte debes intentar tener sólo el código necesario

En los for extendido tienes algo mal:

        for(String nombre: list.getListaCantantes() ){
            System.out.println(nombre);
            i++;
        }

En un for extendido no es necesario llevar una variable de control i e ir haciendo i++. El control del recorrido de elementos lo hace automáticamente Java.

En el main tienes código que no está bien planteado, por ejemplo:

 if(desicion.equalsIgnoreCase("Si")){
                i++;
            }else if(desicion.equalsIgnoreCase("No")){

                System.out.println("Gracias!");
                break;
            }

En este condicional hacer i++ no tiene ninguna utilidad. Por otro lado en caso de el usuario elegir No se sale con un break del bucle. Esto no es recomendable. La salida de un bucle while debe hacerse a través de la condición del while.

Es conveniente que repitas el ejercicio

Consulta si quieres otros hilos como https://www.aprenderaprogramar.com/foros/index.php?topic=2262.0 para ver cómo lo han resuelto otros compañeros y luego intenta hacerlo solo

Otro hilo interesante que comenta el break en bucles: https://www.aprenderaprogramar.com/foros/index.php?topic=2570.0

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