Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Javier1996 en 24 de Agosto 2015, 19:42

Título: Ejercicio metodo equals en java. Comparar letras de palabras CU00662B
Publicado por: Javier1996 en 24 de Agosto 2015, 19:42
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
Título: Re:Ejercicio metodo equals en java. Comparar letras de palabras CU00662B
Publicado por: César Krall 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!
Título: Re:Ejercicio metodo equals en java. Comparar letras de palabras CU00662B
Publicado por: Javier1996 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
Título: Re:Ejercicio metodo equals en java. Comparar letras de palabras CU00662B
Publicado por: César Krall 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!
Título: Re:Ejercicio metodo equals en java. Comparar letras de palabras CU00662B
Publicado por: Javier1996 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
Título: Re:Ejercicio metodo equals en java. Comparar letras de palabras CU00662B
Publicado por: César Krall 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