Autor Tema: (CU00662B) Ejercicio con equals comparar palabras en Java  (Leído 5453 veces)

@dib_vz

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 11
    • Ver Perfil
(CU00662B) Ejercicio con equals comparar palabras en Java
« en: 06 de Diciembre 2014, 04:47 »
He creado primero una clase para definir el objeto a analizar. En este caso es una palabra.

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

public class ComparadorPalabras {

    private String palabra;

    //constructor
    public ComparadorPalabras() {

        palabra="";
        pedirPalabra();
        quitarEspacio();
    }

    //metodo para pedir una entrada de teclado
    public void pedirPalabra() {

        Scanner entradaEscaner = new Scanner(System.in);
        palabra = entradaEscaner.nextLine();
    }

    //este metodo analiza los primeros caracteres para elimnar los espacios antes de la palabra
    public void quitarEspacio() {

        for (int i=0; i<getLongitud(); i++) {

            if (palabra.substring(0,1).equals(" ")) {
                palabra=palabra.substring(1,getLongitud());
            }else {
                palabra=palabra;
            }
        }
    }

    public String getPalabra() {

        return palabra;
    }

    public int getLongitud() {

        return palabra.length();
    }
}

Despues me he creado otra clase main, donde llevo a cabo todos los procesos de comparacion

Código: [Seleccionar]
public class TestComparador {
   
    public static void main(String[] agrs) {
       
        System.out.println("COMPARADOR DE PALABRAS\n______________________\n" +
        "\nEste programa compara dos palabras introducidas por el usuario para su posterior análisis de caracteres\n");
                 
        boolean lanzador=false;
       
        //ciclo para reinicar o finalizar el programa
        while (lanzador==false) {
       
        System.out.println("\nPor favor, introduzca la primera palabra:");
        ComparadorPalabras palabra1=new ComparadorPalabras();
       
        System.out.println("\nPor favor, introduzca la segunda palabra:");
       
        ComparadorPalabras palabra2 = new ComparadorPalabras();
       
        System.out.println("\n¡Gracias por su colaboración!\n" +
        "\n------------------------------------" + "\n----- ESTE ES NUESTRO ANALISIS -----\n" +
        "------------------------------------");
       
        System.out.println("La primera palabra es: '" + palabra1.getPalabra() + "'\nTiene ---- " +
        palabra1.getLongitud() + " caracteres.\n \nLa segunda palabra es: '" + palabra2.getPalabra() + "'\nTiene ---- " +
        palabra2.getLongitud() + " caracteres.\n" + "\n----- Comparador de caracteres -----\n");

        //Funcion que compara los caracteres uno a uno
        if (palabra1.getLongitud() <= palabra2.getLongitud()) {
       
            //Ciclo que se repite en funcion de la longitud de la palabra
            for (int i=0; i<palabra1.getLongitud(); i++) {
               
                if (palabra1.getPalabra().substring(i,i+1).equalsIgnoreCase(palabra2.getPalabra().substring(i,i+1))) {
                    System.out.println("Caracter " + (i+1) + ": " + "La letra '" +
                    palabra1.getPalabra().substring(i,i+1) + "' coincide con la letra '" +
                    palabra2.getPalabra().substring(i,i+1) + "'");
                } else {
                    System.out.println("Caracter " + (i+1) + ": " + "La letra '" +
                    palabra1.getPalabra().substring(i,i+1) + "' no coincide con la letra '" +
                    palabra2.getPalabra().substring(i,i+1) + "'");
                }
            }
           
            //Condicion para saber si las palabras tienen igual o menos caracteres
            if (palabra1.getLongitud() < palabra2.getLongitud()) {
                System.out.println("\n'" + palabra1.getPalabra() + "'" +
                "no tiene más caracteres para comparar.\nFin del análisis.");
            } else {
                System.out.println("\nFin del análisis.");
            }
           
        } else {
                     
            for (int i=0; i<palabra2.getLongitud(); i++) {
               
                if (palabra1.getPalabra().substring(i,i+1).equalsIgnoreCase(palabra2.getPalabra().substring(i,i+1))) {
                    System.out.println("Caracter " + (i+1) + ": " + "La letra '" +
                    palabra1.getPalabra().substring(i,i+1) + "' coincide con la letra '" +
                    palabra2.getPalabra().substring(i,i+1) + "'");
                } else {
                    System.out.println("Caracter " + (i+1) + ": " + "La letra '" +
                    palabra1.getPalabra().substring(i,i+1) + "' no coincide con la letra '" +
                    palabra2.getPalabra().substring(i,i+1) + "'");
                }
            }
           
            System.out.println("\n'" + palabra2.getPalabra() + "'" +
            "no tiene más caracteres para comparar.\nFin del análisis.\n");
        }
       
        System.out.println("\n¿Desea analizar otra palabra(y/n)?");
        ComparadorPalabras palabra3 = new ComparadorPalabras();
       
        if (palabra3.getPalabra().equalsIgnoreCase("y")) {
            lanzador=false;
        } else {
            lanzador=true;
            System.out.println("\nEspero que haya disfrutado del programa.\n\nDesarrollado por @dib_vz");
        }
     }
   }
}
« Última modificación: 06 de Diciembre 2014, 21:47 por Ogramar »

Jorge lopez

  • Sniper
  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 248
  • @SniperOfElite
    • Ver Perfil
Re:(CU00662B) Ejercicio con equals
« Respuesta #1 en: 06 de Diciembre 2014, 18:25 »
 Hola  @dib_vz!

Tu programa realiza la tarea requerida en el enunciado de este ejercicio correctamente, pero te comentare sobre algo que debes de tener claro y que debes corregir en este código que has planteado.

El nombre de una clase dice lo que es o lo que hace, por tanto si un programador mira el nombre de tu clase ComparadorPalabras sin necesidad de mirar su código podría deducir que esta clase compara palabras. Ahora bien, una cosa es lo que diga el nombre de una clase y otra cosa es el que el código contenido en dicha clase respalde lo que se interprete al leer el nombre de dicha clase o no.

En realidad tu clase ComparadorPalabras no es ni hace lo que se interpreta al leer su nombre, mas bien podría llamarse EntradaDeTeclado o EntradaPorTeclado. Tu clase (con main) TestComparador es la clase que en realidad se esta encargando de comparar las palabras que recibe al crear dos objetos tipo ComparadorPalabras respectivamente.

Cada clase debe de encargarse de realizar su funcion, si la clase se llama ComparadorPalabras esta clase debería de limitarse solo a comparar palabras y no incluir en ella mas funciones como ( import java.util.Scanner; ) pedir entradas de teclado ext..

Yo te recomendaría replantear este ejercicio de la siguiente manera:

1: Crea una clase EntradaPorTeclado que use la clase Scanner para crear una entrada de teclado y que dicha entrada no muestre ningún tipo de mensaje,(System.out.println) mas adelante en una clase con main se mostraria un mensaje de tipo: "Por favor escriba la primera palabra" seguido de un metodo pedirEntrada de la clase EntradaPorTeclado.

2: Crea una clase ComparadorPalabras que se encargue de realizar la comparación entre dos palabras y que muestre por pantalla el resultado de la comparación, en esta clase es donde es preferible hacer uso de los métodos substring, length, equals, entre otros posibles métodos de ser necesarios.

3: Crea una clase con el método main que se encargue de dirigir el programa, en dicha clase se crearían los mensajes adicionales a mostrar por pantalla, por ejemplo: saludos, pedir datos, cortesía para con el usuario,
(gracias, despedida, ext..) ext.

PD: Me a gustado la forma en que muestras los mensajes por pantalla, todo bien organizado, así como también las correctas declaraciones de variables.

Saludos.
while(estesVivo)
{
  aprende();
  ayuda();
  enseña();
}
if(mueres){teRecordaran();}

@dib_vz

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 11
    • Ver Perfil
Re:(CU00662B) Ejercicio con equals comparar palabras en Java
« Respuesta #2 en: 07 de Diciembre 2014, 04:39 »
Gracias por las recomendaciones. Me gusta la idea de separar todo en diferentes clases segun la funcion que tenga cada una y que sea la clase main la que dirija todo el proceso del programa. Tiene toda la logica del mundo.

un saludo

 

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