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: @dib_vz en 06 de Diciembre 2014, 04:47
-
He creado primero una clase para definir el objeto a analizar. En este caso es una palabra.
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
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");
}
}
}
}
-
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.
-
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