Autor Tema: Cómo hacer más eficiente un código Java ahorrar recursos evitar repetir CU00662B  (Leído 7450 veces)

MarckyMarck

  • Sin experiencia
  • *
  • Mensajes: 15
    • Ver Perfil
Hola buenas tardes!

Les agradecería mucho que revisen mi código y hagan las observaciones correspondientes.

Aquí mi código:

Código: [Seleccionar]
import java.util.Scanner;
public class CompPalabras
{
    public static void main (String []args)
    {
        System.out.println("Introduzca la primera palabra");
        Scanner introPalabra1=new Scanner(System.in);
        String palabra1=introPalabra1.nextLine();
        System.out.println("Introduzca la segunda palabra");
        Scanner introPalabra2=new Scanner(System.in);
        String palabra2=introPalabra2.nextLine();
        if (palabra2.length()>palabra1.length()){
            for(int i=0;i<palabra1.length();i++){

                System.out.println("¿Letra "+(i+1)+" igual en las dos palabras?: "+palabra2.substring(i,i+1).equals(palabra1.substring(i,i+1)));
            }
            for(int j=palabra1.length();j<palabra2.length();j++){
                System.out.println("Letra "+(j+1)+" igual en las dos palabras?: "+"La palabra 1 no tiene letra "+(j+1));
            }
        }else if (palabra1.length()>palabra2.length()){
            for(int i=0;i<=palabra2.length()-1;i++){

                System.out.println("¿Letra "+(i+1)+" igual en las dos palabras?: "+palabra1.substring(i,i+1).equals(palabra2.substring(i,i+1)));
            }
            for(int j=palabra2.length();j<palabra1.length();j++){
                System.out.println("Letra " +(j+1)+" igual en las dos palabras? :"+ "La palabra 2 no tiene letra "+(j+1));
            }
        }else{
            for(int i=0;i<palabra2.length();i++){

                System.out.println("¿Letra "+(i+1)+" igual en las dos palabras?: "+palabra1.substring(i,i+1).equals(palabra2.substring(i,i+1)));
            }
        }
    }
}

De antemano muchas gracias! Que tengan un excelente día.
« Última modificación: 20 de Septiembre 2015, 11:36 por Alex Rodríguez »

RaGa

  • Moderador Global
  • Intermedio
  • *******
  • APR2.COM
  • Mensajes: 234
    • Ver Perfil
Re:Java desde cero. Ejercicio CU00662B Comparar cadenas de string.
« Respuesta #1 en: 20 de Septiembre 2015, 00:40 »
Hola MarckyMarck!

Estuve revisando tu ejercicio y funciona correctamente, cumple con la consigna del ejercicio, así que felicitaciones!

Con el fin de mejorar aún más el código ya que has llegado a este punto de lograr con éxito la resolución del problema, intentaría hacer un poco más eficiente el código.

Veamos qué alternativa podríamos incorporar:
En el código defines 2 objetos tipo Scanner. Realmente tal vez con uno solo podríamos servirnos para obtener las dos palabras que necesitamos para este problema ¿Cómo sería esto?

Código: [Seleccionar]
        System.out.println("Introduzca la primera palabra");
        Scanner introPalabra=new Scanner(System.in);
        String palabra1=introPalabra.nextLine();
        System.out.println("Introduzca la segunda palabra");
        String palabra2=introPalabra.nextLine();

Y con esto ya nos hemos ahorrado un recurso (un objeto Scanner menos).

Otra cosa que podemos ver a simple vista es que hay bastante semejanzas en los ciclos for. Si bien cada ciclo cumple con una función específica y se comporta como un engranaje escencial en el funcionamiento orgánico del conjunto, existen semejanzas que hacen pensar que tal vez podría depurarse aún más esta parte.
¿De qué manera? se podría pensar que una vez que determinamos cuál de las dos palabras tiene más caracteres, establecer un atributo limiteSuperior que contenga la cantidad de caracteres de la palabras más larga, y un atributo limiteInferior que contenga la cantidad de caracteres de la palabra más corta.
De esta manera, luego si, hacemos uso de un ciclo for (esta vez único) que haga el trabajo.

Puedes ver la implementación de esta idea en el siguiente link.
https://www.aprenderaprogramar.com/foros/index.php?topic=2089.msg10280#msg10280

Pero insisto en lo siguiente, tu código es excelente y cumple con la propuesta del ejercicio de la lección. Simplemente te invito a ver otra alternativa de resolución, otra posibilidad, otra forma de pensar el problema.

Saludos!


MarckyMarck

  • Sin experiencia
  • *
  • Mensajes: 15
    • Ver Perfil
Entendido! Ya revisé el código que me pusiste de ejemplo. Muchísimas gracias por las sugerencias. A partir de ahora voy a enfocarme no sólo en la resolución del problema, sino en hacer eficiente el programa para que consuma menos recursos, gracias y saludos!

 

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