Autor Tema: Ejercicio CU00662B metodo equals java comparar objetos diferencia igualdad ident  (Leído 3371 veces)

el_calderas

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 43
    • Ver Perfil
Hola, este es el primer codigo que subo al foro.
Agradeceria cualquier comentario, consejo o correción que veais.

Un saludo.

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

public class TextEquals
{

    public static void main(String[]args){
        String text1="";
        String text2="";
        System.out.println("Introduce primer texto");
        Scanner imput1=new Scanner(System.in);
        text1=imput1.nextLine();
        System.out.println("Introduce segundo texto");
        Scanner imput2=new Scanner(System.in);
        text2=imput2.nextLine();

        if(text1.length()>text2.length()){
            int i=0;
            while(i<text2.length()){
                if(text1.substring(i,i+1).equals(text2.substring(i,i+1))){
                    System.out.println("¿Letra "+ (i+1) +" igual en las dos palabras? Cierto");
                }else{
                    System.out.println("¿Letra "+ (i+1) +" igual en las dos palabras? falso");
                }
                i++;
            }
            for(;i<text1.length();i++){
                System.out.println("La palabra 2 no tiene letra "+ (i+1));
            }
        }else if(text1.length()<text2.length()){
            int i=0;
            while(i<text1.length()){
                if(text1.substring(i,i+1).equals(text2.substring(i,i+1))){
                    System.out.println("¿Letra "+ (i+1) +" igual en las dos palabras? Cierto");
                }else{
                    System.out.println("¿Letra "+ (i+1) +" igual en las dos palabras? falso");
                }
                i++;
            }
            for(;i<text2.length();i++){
                System.out.println("La palabra 1 no tiene letra "+ (i+1));
            }
        }else{
            for(int i=0;i<text2.length();i++){
                if(text1.substring(i,i+1).equals(text2.substring(i,i+1))){
                    System.out.println("¿Letra "+ (i+1) +" igual en las dos palabras? Cierto");
                }else{
                    System.out.println("¿Letra "+ (i+1) +" igual en las dos palabras? falso");
                }
            }
        }
    }
}

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Hola! El código está bien planteado y bien estructurado. A modo de ejercicio te propongo que lo mejores de la siguiente manera: en lugar del código para if(text1.length()>text2.length()), else if(text1.length()<text2.length()), que resulta repetitivo, intentar analizar cuál es la palabra más larga y cuál es la más corta y almacenarlas en Strings temporales, de modo que tengas un solo bucle while. De ese modo, el código quedaría en menos líneas y si podemos hacer lo mismo con menos líneas, mejor. Saludos!
Responsable de departamento de producción aprenderaprogramar.com

el_calderas

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 43
    • Ver Perfil
Hola, gracias por el consejo.
¿Asi estaría correcto?, por que tengo una duda...
Código: [Seleccionar]
import java.util.Scanner;

public class TextEquals2
{

    public static void main(String[]args){
        String text1="";
        String text2="";
        String textLarge="";
        String textShort="";
        int x=0;
        System.out.println("Introduce primer texto");
        Scanner imput1=new Scanner(System.in);
        text1=imput1.nextLine();
        System.out.println("Introduce segundo texto");
        Scanner imput2=new Scanner(System.in);
        text2=imput2.nextLine();

        if(text1.length()>text2.length()){
            textLarge=text1;
            textShort=text2;
            x=2;
        }else if(text1.length()<text2.length()){
            textLarge=text2;
            textShort=text1;
            x=1;
        }
        if (text1.length()==text2.length()){
            for(int i=0;i<text2.length();i++){
                if(text1.substring(i,i+1).equals(text2.substring(i,i+1))){
                    System.out.println("¿Letra "+ (i+1) +" igual en las dos palabras? Cierto");
                }else{
                    System.out.println("¿Letra "+ (i+1) +" igual en las dos palabras? falso");
                }
            }

        }else{
            int i=0;
            while(i<textShort.length()){
                if(text1.substring(i,i+1).equals(text2.substring(i,i+1))){
                    System.out.println("¿Letra "+ (i+1) +" igual en las dos palabras? Cierto");
                }else{
                    System.out.println("¿Letra "+ (i+1) +" igual en las dos palabras? falso");
                }
                i++;
            }
            for(;i<textLarge.length();i++){
                System.out.println("La palabra "+ x +" no tiene letra "+ (i+1));
            }

        }
    }
}

Mi duda es: ¿es correcto hacer la inicialización de los atributos text1, text2, textLarge, textShort y x, fuera de un constructor, donde es por definición donde se inicializan?

Gracias.

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Sí, es correcto. text1, text2, textLarge, textShort y x no son atributos de la clase, son variables locales al método main. Las variables locales son variables que usas dentro de un método "según tengas necesidad", no hay problema siempre que mantengas una lógica. Creo que todavía podrías acortar más el código si en vez de la comparación if (text1.length()==text2.length()) usas una comparación basada en textLarge y textShort. Creo que podrías simplemente extraer todas las letras del texto largo hasta la longitud del texto corto (un bucle) y si el texto largo tiene más letras, mostrar el mensaje de que no se pueden comparar esas letras. De todas formas no te preocupes, sigue avanzando. Saludos!
Responsable de departamento de producción aprenderaprogramar.com

 

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