Autor Tema: Ejercicio metodo equals en java. Comparar letras de palabras CU00662B  (Leído 5604 veces)

Javier1996

  • Sin experiencia
  • *
  • Mensajes: 16
    • Ver Perfil
Hola, aquí mi solución, creo que abuse un poco de las condicionales y variables, pero no se me ocurrió otra forma. espero que este bien.

Saludos!!

Código: [Seleccionar]
import java.util.Scanner;
public class Compara{
    public static void main (String [] args){
        //primera entrada
        String entrada1 = "";
        System.out.println("Porfavor ingrese la entrada 1");
        Scanner escanear1 = new Scanner(System.in);
        entrada1 = escanear1.nextLine();
        //segunda entrada
        String entrada2 = "";
        System.out.println("Porfavor ingrese la entrada 2");
        Scanner escanear2 = new Scanner(System.in);
        entrada2 = escanear2.nextLine();
        int i = 0;//variable para la primera entrada
        int j = 0;//variable para la segunda entrada
        int c = 0;//Contador de palabra
        int d = 0;//variable para establecer la sentencia break
        int m = 0;//Variable con el numero de caracteres de la cadenas mas corta
        while ( true ){   
            if ( entrada1.length() > entrada2.length() ){ d = entrada1.length(); m = entrada2.length();}
            if ( entrada1.length() < entrada2.length() ){ d = entrada2.length(); m = entrada1.length();}
            if ( entrada1.length() == entrada2.length() ){ d = entrada1.length(); m = entrada2.length();}
            c++;
            if ( i < m && j < m ){
                boolean verdad = entrada1.substring( i, i+1).equals(entrada2.substring( j, j+1) );
                System.out.println("¿Letra " + c + " igual en las dos palabras? " + verdad);
            }
            if ( entrada1.length() > entrada2.length() && j >= entrada2.length() ){
                System.out.println("¿Letra " + c + " igual en las dos palabras? \nLa palabra 2 no tiene letra " + c);
            }
            if ( entrada1.length() < entrada2.length() && i >= entrada1.length() ){
                System.out.println("¿Letra " + c + " igual en las dos palabras? \nLa palabra 1 no tiene letra " + c);
            }
            i ++;
            j ++;
            if ( i == d && j == d){break;}

        }//Cierre del bucle
    }//Cierre del main
}//Cierre de la clase
« Última modificación: 26 de Agosto 2015, 10:00 por César Krall »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:Ejercicio metodo equals en java. Comparar letras de palabras CU00662B
« Respuesta #1 en: 26 de Agosto 2015, 10:00 »
Hola!

Cosas a mejorar:

- La forma de nombrar las clases. Lee lo que se explica en https://www.aprenderaprogramar.com/foros/index.php?topic=3035.msg13698#msg13698

Sería un mejor nombre de clase ComparadorDePalabras o algo así en lugar de Compara


- No debe usarse un bucle while donde la condición sea while (true) porque esto es un mal diseño. Lee lo que se explica en https://www.aprenderaprogramar.com/foros/index.php?topic=3074

Al haber usado while (true) te obliga a usar un break. Debes eliminar tanto el while (true) como el break. break es una forma no adecuada para salir de un bucle, lee lo que se explica en https://www.aprenderaprogramar.com/foros/index.php?topic=3060

- También recomiendo dar nombres descriptivos a las variables (excepto contadores en bucles for o similar), por ejemplo

int m = 0;//Variable con el numero de caracteres de la cadenas mas corta

int numCharCadenaCorta = 0;//Variable con el numero de caracteres de la cadenas mas corta

Si los nombres son descriptivos el código resulta más fácil de estudiar y mantener y en general se considera mejor programación.

Con todo lo indicado deberías intentar reescribir el ejercicio.

Saludos!
Responsable de departamento de producción aprenderaprogramar.com

Javier1996

  • Sin experiencia
  • *
  • Mensajes: 16
    • Ver Perfil
Re:Ejercicio metodo equals en java. Comparar letras de palabras CU00662B
« Respuesta #2 en: 13 de Septiembre 2015, 15:57 »
Hola Cesar
Muchas gracias por tu consejo, tienes toda la razón.
aquí el código con las correcciones.
Saludos!!

Código: [Seleccionar]
import java.util.Scanner;
public class CompararDosPalabras{
    public static void main (String [] args){
        //primera entrada
        String entrada1 = "";
        System.out.println("Porfavor ingrese la entrada 1");
        Scanner escanear1 = new Scanner(System.in);
        entrada1 = escanear1.nextLine();

        //segunda entrada
        String entrada2 = "";
        System.out.println("Porfavor ingrese la entrada 2");
        Scanner escanear2 = new Scanner(System.in);
        entrada2 = escanear2.nextLine();

        //Variables
        int c = 0;//Contador de palabra
        int NumCharCadenaLarga = 0;//variable con el numero de caracteres de la cadena mas larga
        int NumCharCadenaCorta = 0;//Variable con el numero de caracteres de la cadenas mas corta
        if ( entrada1.length() > entrada2.length() ){ NumCharCadenaLarga = entrada1.length(); NumCharCadenaCorta = entrada2.length();}
        if ( entrada1.length() < entrada2.length() ){ NumCharCadenaLarga = entrada2.length(); NumCharCadenaCorta = entrada1.length();}
        if ( entrada1.length() == entrada2.length() ){ NumCharCadenaLarga = entrada1.length(); NumCharCadenaCorta = entrada2.length();}
       
        while ( c <= NumCharCadenaLarga ){   
            if ( c < NumCharCadenaCorta ){
                boolean verdad = entrada1.substring( c, c+1).equals(entrada2.substring( c, c+1) );
                System.out.println("¿Letra " + (c+1) + " igual en las dos palabras? " + verdad);
            }
            if ( entrada1.length() > entrada2.length() && c >= entrada2.length() ){
                System.out.println("¿Letra " + c + " igual en las dos palabras? \nLa palabra 2 no tiene letra " + c);
            }
            if ( entrada1.length() < entrada2.length() && c >= entrada1.length() ){
                System.out.println("¿Letra " + c + " igual en las dos palabras? \nLa palabra 1 no tiene letra " + c);
            }
            c ++;
        }//Cierre del bucle
        //Mensaje para verificar que el programa funciona correctamente, solo ignoren esta parte =P
        System.out.println("Ha finalizado la comparacion \nLa primera entrada consta de " + entrada1.length() + " caracteres" +
            "\nLa segunda entrada consta de " + entrada2.length() + " caracteres");
    }//Cierre del main
}//Cierre de la clase

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:Ejercicio metodo equals en java. Comparar letras de palabras CU00662B
« Respuesta #3 en: 15 de Septiembre 2015, 08:59 »
Hola ahora mucho mejor

Al nombrar las clases conviene pensar qué será el objeto. Un objeto como este será un Comparador, no un Comparar, por ello es más adecuado un nombre como ComparadorDeDosPalabras, tenerlo en cuenta para los próximos ejercicios.

Una cosa que se puede mejorar es esta:

Código: [Seleccionar]
        if ( entrada1.length() > entrada2.length() ){ NumCharCadenaLarga = entrada1.length(); NumCharCadenaCorta = entrada2.length();}
        if ( entrada1.length() < entrada2.length() ){ NumCharCadenaLarga = entrada2.length(); NumCharCadenaCorta = entrada1.length();}
        if ( entrada1.length() == entrada2.length() ){ NumCharCadenaLarga = entrada1.length(); NumCharCadenaCorta = entrada2.length();}

Si te fijas la primera condición y la tercera llevan a la misma acción. Por ello ahorraríamos código si escribimos:
Código: [Seleccionar]
        if ( entrada1.length() >= entrada2.length() ){ NumCharCadenaLarga = entrada1.length(); NumCharCadenaCorta = entrada2.length();}
        if ( entrada1.length() < entrada2.length() ){ NumCharCadenaLarga = entrada2.length(); NumCharCadenaCorta = entrada1.length();}



También deberías corregir un pequeño error que tienes en los índices. Por ejemplo esta ejecución:

Citar
Porfavor ingrese la entrada 1
pan
Porfavor ingrese la entrada 2
pt
¿Letra 1 igual en las dos palabras? true
¿Letra 2 igual en las dos palabras? false
¿Letra 2 igual en las dos palabras?
La palabra 2 no tiene letra 2
¿Letra 3 igual en las dos palabras?
La palabra 2 no tiene letra 3
Ha finalizado la comparacion
La primera entrada consta de 3 caracteres
La segunda entrada consta de 2 caracteres


Si te fijas Letra 2 se repite y dice que la palabra 2 no tiene letra 2 lo cual no es correcto, el programa está bien pero tienes que corregir los índices para que los mensajes que salgan por pantalla sean los correctos. Debes siempre probar los programas varias veces para comprobar que funcionen bien y que den los mensajes correctos.

Saludos!
Responsable de departamento de producción aprenderaprogramar.com

Javier1996

  • Sin experiencia
  • *
  • Mensajes: 16
    • Ver Perfil
Re:Ejercicio metodo equals en java. Comparar letras de palabras CU00662B
« Respuesta #4 en: 15 de Septiembre 2015, 23:14 »
Hola Cesar
Gracias por tus observaciones, se me había pasado por alto ese detalle de los indice.
Le prestare mas atención a esos detalles de ahora en adelante.
por si acaso subo el código con las mejoras.
Muchas gracias por tu tiempo.
Saludos!!

Código: [Seleccionar]
import java.util.Scanner;
public class CompararDosPalabras{
    public static void main (String [] args){
        //primera entrada
        String entrada1 = "";
        System.out.println("Porfavor ingrese la entrada 1");
        Scanner escanear1 = new Scanner(System.in);
        entrada1 = escanear1.nextLine();

        //segunda entrada
        String entrada2 = "";
        System.out.println("Porfavor ingrese la entrada 2");
        Scanner escanear2 = new Scanner(System.in);
        entrada2 = escanear2.nextLine();

        //Variables
        int c = 0;//Contador de palabra
        int NumCharCadenaLarga = 0;//variable con el numero de caracteres de la cadena mas larga
        int NumCharCadenaCorta = 0;//Variable con el numero de caracteres de la cadenas mas corta
        if ( entrada1.length() >= entrada2.length() ){ NumCharCadenaLarga = entrada1.length(); NumCharCadenaCorta = entrada2.length();}
        if ( entrada1.length() < entrada2.length() ){ NumCharCadenaLarga = entrada2.length(); NumCharCadenaCorta = entrada1.length();}
       
        while ( c < NumCharCadenaLarga ){   
            if ( c < NumCharCadenaCorta ){
                boolean verdad = entrada1.substring( c, c+1).equals(entrada2.substring( c, c+1) );
                System.out.println("¿Letra " + (c+1) + " igual en las dos palabras? " + verdad);
            }
            if ( entrada1.length() > entrada2.length() && c >= entrada2.length() ){
                System.out.println("¿Letra " + (c+1) + " igual en las dos palabras? \nLa palabra 2 no tiene letra " + (c+1));
            }
            if ( entrada1.length() < entrada2.length() && c >= entrada1.length() ){
                System.out.println("¿Letra " + (c+1) + " igual en las dos palabras? \nLa palabra 1 no tiene letra " + (c+1));
            }
            c ++;
        }//Cierre del bucle
        //Mensaje para verificar que el programa funciona correctamente, solo ignoren esta parte =P
        System.out.println("Ha finalizado la comparacion \nLa primera entrada consta de " + entrada1.length() + " caracteres" +
            "\nLa segunda entrada consta de " + entrada2.length() + " caracteres");
    }//Cierre del main
}//Cierre de la clase

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:Ejercicio metodo equals en java. Comparar letras de palabras CU00662B
« Respuesta #5 en: 17 de Septiembre 2015, 10:05 »
Hola! Cuanto más practiques y veas código más soltura irás adquiriendo así que a seguir avanzando!

Saludos
Responsable de departamento de producción aprenderaprogramar.com

 

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