El programa cumple la consigna del ejercicio.
Lo has resuelto creando dos clases: una clase que gestiona la entrada de palabras ingresadas por teclado, y otra clase que implementa el método main. Eso me parece muy bien, delimitar la tarea que realizará cada clase. Es lo que más me ha gustado de tu código. Estás empezando a comprender la filosofía de la POO.
Hay también cosas que no las veo bien, y veamos cómo podemos mejorarlo:
1) Una vez más he de recomendarte que a las clases las nombres con una mayúscula como letra inicial. Acostúmbrate a seguir las convenciones. Recuerda que nuestros códigos no solo lo leeremos nosotros mismos, sino que podemos participar de un proyecto donde intervengan más programadores y hay convenciones que deben ser respetadas por todos para que nos podamos entender.
2) Respecto de la clase comparacionLetra.
No me parece adecuado el nombre que le has dado a la clase, ya que su nombre no indica lo que hace.
Te sugeriría renombraras la clase con un nombre más significativo, que nos indique para qué sirve, qué tarea cumple, por ejemplo podríamos pensar en llamarla: GestionadorEntradasTeclado.
Declaras un campo de instancia del tipo String entradaTeclado. Yo declararía también un campo de instancia que sea de tipo Scanner. Tu declaraste el tipo Scanner dentro de un método, esto no me parece bien, recomiendo que lo declares como campo de instancia.
Tampoco me parece correcto llamar a un método dentro del Constructor. Dentro del Constructor inicilizaría el campo entradaTeclado solamente.
Luego, implementaría un método llamado recogerPalabra() que me devolviera un String con la palabra que se ingresa por el teclado.
De esta manera queda más sólida la clase, con un método que realiza lo que dice realizar: recoger una palabra desde el teclado.
import java.util.Scanner;
public class GestionadorEntradasTeclado{
private String entradaTeclado;
Scanner entradaEscaner = new Scanner(System.in);
public GestionadorEntradasTeclado(){
entradaTeclado = "";
}
public String recogerPalabra(){
entradaTeclado = entradaEscaner.nextLine();
return entradaTeclado;
}
}
3) Respecto a la clase comparacion
Aqui también elegiría otro nombre para la clase. Elige algo que nos diga para qué sirve la clase, por ejemplo ComparadorDePalabras, (puedes elegir otro nombre si te parece).
Como ya tendrás tu clase GestionadorEntradasTeclado, entonces habrá que declarar e instanciar un objeto de este tipo dentro del método main.
public static void main(String[]args){
GestionadorEntradasTeclado miTeclado = new GestionadorEntradasTeclado();
luego, a los atributos String entrada_1 y entrada_2 les asignas sus valores valiéndote del método recogerPalabra() del objeto miTeclado tipo GestionadorEntradasTeclado.
System.out.println("Introduce la primera cadena");
String entrada_1 = miTeclado.recogerPalabra();
System.out.println("Introduce la segunda cadena");
String entrada_2 = miTeclado.recogerPalabra();
Otra cosa que me ha llamado la atención en esta clase es lo siguiente:
if(entrada_1.length()>entrada_2.length()){
limiteInf=entrada_1.length();
palabra = 2;
limiteSup = entrada_2.length();
}
else{
limiteInf=entrada_2.length();
palabra = 1;
limiteSup = entrada_1.length();
}
Como regla muy general, trataremos que lo que nosotros codifiquemos sea lo más parecido a la realidad. Me refiero a que si la longitud del String entarada_1 es menor a la longitud del String entrada_2, pues entonces asignemos la longitud de entrada_1 al parametro limiteInf.
Si bien esa parte de tu código que transcribi funciona y logra su propósito, pareciera no ser lógico. Más lógico sería escribir:
if(entrada_1.length()<entrada_2.length()){
limiteInf=entrada_1.length();
palabra = 1;
limiteSup = entrada_2.length();
}
else{
limiteInf=entrada_2.length();
palabra = 2;
limiteSup = entrada_1.length();
}
Eso provocará que tengas que modificar también los límites del for y del if de la siguiente manera:
for(int i=0;i<limiteSup;i++){
if(i<limiteInf){
System.out.println("¿Letra "+(i+1)+" igual en las dos palabras? " + (entrada_1.substring(i,i+1).equals(entrada_2.substring(i,i+1))));
}
else{
System.out.println("La palabra "+palabra+" no tiene letra "+(i+1));
}
}
lo cual también viene siendo más lógico.
Te invitaría a reescribir tu código con estas recomendaciones. Estamos aquí para volverlo a revisar con gusto!