Autor Tema: CU00662B Ejemplo equals en Java. Diferencia entre igualdad e identidad de objeto  (Leído 3309 veces)

Lorenzo31

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 381
    • Ver Perfil
Buenas, entrego dos soluciones de este ejercicio.

La razón es porque en la primera queria comparar un substring con null o "vacio" y buscando no existe forma, lanza excepción cuando los parametros no están entre el tamaño del substring. Y planteé otra solución a esa.

Primera Solucion con Excepcion.

Código: [Seleccionar]
import java.util.Scanner;

public class Comparador{

    public static void main (String[] args){

        String palabra1; String palabra2; String comprobar;
        int menorPalabra = 1;  //por defecto la palabra menor es la 1era si el if no lo cambia se quedará así
        int longitud = 0;

        System.out.println("Introduce la primera palabra");
        Scanner entrada1 = new Scanner(System.in);
        palabra1 = entrada1.next();   //utilizo el next() para descartar los espacios solo coje primera palabra

        System.out.println("Introduce la segunda palabra");
        Scanner entrada2 = new Scanner(System.in);
        palabra2 = entrada2.next();
         
        // Compruebo si la palabra 2 es mas larga que la primera o no, para ponerlo en el bucle for como limite.
         
         if(palabra2.length()> palabra1.length() ){
            longitud = palabra2.length();
           
        }else { longitud = palabra1.length();
                 menorPalabra = 2;}

        //inicializa a 0 y recorre todos los valores hasta llegar a la longitud menos uno
        for (int x = 0; x < longitud; x++){

            try{
                //if( palabra1.substring(x,x+1)!= null && palabra2.substring(x,x+1) != null ){
                    if(palabra1.substring(x,x+1).equals(palabra2.substring(x,x+1) ) ){
                        System.out.println("¿Letra " + (x+1) + " igual en las dos palabras? True");
                    }else{ System.out.println("¿Letra " + (x+1) + " igual en las dos palabras? False");}
               // }
            } catch (IndexOutOfBoundsException e) {
                System.out.println("¿Letra " + (x+1) + " igual en las dos palabras? La palabra " +
                    menorPalabra + " no  tiene letra " + (x+1));}
        }
    } 
}

Segunda solución con dos Clases, main y una que analiza (para practicar llamar metodos de otra clase)

Clase main

Código: [Seleccionar]
import java.util.Scanner;

public class Comparador1{
   
    public static void main (String[] args){
        String palabra1; String palabra2;
       
        System.out.println("Introduce la primera palabra");
        Scanner entrada1 = new Scanner(System.in);
        palabra1 = entrada1.next(); //con esta opcion me aseguro que solo recojo una palabra hasta un espacio
       
        System.out.println("Introduce la segunda palabra");
        Scanner entrada2 = new Scanner(System.in);
        palabra2 = entrada2.next();
       
        Analiza compara = new Analiza();
        compara.checkPalabra(palabra1,palabra2);
    }
}

Clase Analiza

Código: [Seleccionar]
public class Analiza{

    public Analiza(){ //vacio
    }

    public void checkPalabra(String palabra1, String palabra2){
       
        // cualMenor es un semáforo que es o 1 o 2 depende cual palabra sea la menor, por defecto se inicializa con 1.
        int cualMenor = 1; int mayor; int menor;

        if(palabra1.length() > palabra2.length() ){
            cualMenor = 2;
            mayor = palabra1.length();
            menor = palabra2.length();
        }else {
            mayor = palabra2.length();
            menor = palabra1.length();
        }

        for(int x = 0; x < mayor;){
            while(x < menor){
                if(palabra1.substring(x,x+1).equals(palabra2.substring(x,x+1)) ){
                    System.out.println("Letra " + (x+1) + " igual en las dos palabras: True");
                }else{
                    System.out.println("Letra " + (x+1) + " igual en las dos palabras: False");
                }
                x++;
            }

            System.out.println("La palabra " + cualMenor + " no tiene letra " + (x+1));
            x++;

        }
    }
}
« Última modificación: 25 de Marzo 2015, 08:22 por Alex Rodríguez »

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Hola Lorenzo

Tus dos soluciones son correctas. OK.
Y en la segunda, ya estás usando la filosofía de Java. Un main director y las clases que realizan el trabajo.

Muy original capturar la excepción cuando una palabra es más corta para mostrar el mensaje adecuado.

Supongo que ya sabes que null y vacío no es lo mismo.
Null es que la variable no se ha inicializado, o se le ha quitado cualquier valor
vacio es, variable inicializada pero con un valor vacío.

Se puede trabajar con valores vacíos pero no con null

Saludos

Lorenzo31

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 381
    • Ver Perfil
Gracias Toni como siempre. Si he intentado usar filosofia Java, aunque poco elaborada jeje.

Si, conozco la diferencia (creo), "" vacio y null, desconocido, basicamente o indefinible.

Mi pregunta es, no es considerado chapucero usar las excepciones en tu favor digamos.. aunque en ese caso, no tenía otra solucion, a no ser replantear el ejercicio como hice en el segundo caso.

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Hola Lorenzo

Las excepciones se suelen usar para controlar mediante código alternativo situaciones que el compilador no puede resolver por sí solo.
Un ejemplo típico es, la división por cero.

Tú siempre puedes usar los recursos de que dispones a tu buen entender. En este caso capturar la excepción particular que se da en tu código. Intentas leer un String más allá de su tamaño.

También puedes codificar sabiendo que ese 'error' ocurrirá con certeza.
Cosa que has hecho en el segundo ejercicio.

También has de saber que se codifica creando excepciones personalizadas. Por ejemplo una excepción que salte cuando un int esté fuera de un rango dado

Por lo tanto las excepciones trabajan para nosotros, no al revés.

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