Autor Tema: Java diferencia de igualdad e identidad. Comparar objetos. Ejemplos. (CU00662B)  (Leído 3238 veces)

5378453

  • Principiante
  • **
  • Mensajes: 56
    • Ver Perfil
    • Mugiwara no Fansub
No sabia si hacer todo el codigo en main, asi que lo hice asi, queria poner todo el codigo en la clase ComparacionLetra pero no se como hacer que el main llame a esa funcion si estuviera en otra clase

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

public class comparacion
{
   
   public static void main(String[]args){
       System.out.println("Introduce la primera cadena");
       comparacionLetra entrada1 = new comparacionLetra();
       System.out.println("Introduce la segunda cadena");
       comparacionLetra entrada2 = new comparacionLetra();
       int limiteSup;
       int limiteInf;
       int palabra;
       String entrada_1 = entrada1.getComparacionLetra();
       String entrada_2 = entrada2.getComparacionLetra();
       
        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();
        }
       
        for(int i=0;i<limiteInf;i++){
            if(i<limiteSup){
                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));
            }
        }
    }
       
    }
     

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

public class comparacionLetra
{
    private String entradaTeclado;
   
    public comparacionLetra(){
       entradaTeclado = "";
       pedirLetra();
    }
   
    public void pedirLetra(){
        Scanner entradaEscaner = new Scanner(System.in);
        entradaTeclado = entradaEscaner.nextLine();
    }
   
    public String getComparacionLetra(){
        return entradaTeclado;
    }
   
    public void setComparacionLetra(String entradaTeclado){
        this.entradaTeclado = entradaTeclado;
    }
   
}
« Última modificación: 14 de Mayo 2015, 09:47 por Alex Rodríguez »

RaGa

  • Moderador Global
  • Intermedio
  • *******
  • APR2.COM
  • Mensajes: 234
    • Ver Perfil
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.

Código: [Seleccionar]
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.

Código: [Seleccionar]
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.

Código: [Seleccionar]
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:

Código: [Seleccionar]
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:

Código: [Seleccionar]
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:

Código: [Seleccionar]
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!

 

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