Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
3
respuestas

Multiplos de 3

int multiplos=0; while (multiplos<100) { multiplos++; if (multiplos%3==0) { System.out.println(multiplos); } }

3 respuestas

¡Hola Katherine! Gracias por aportarnos con tu solución al ejercicio de "Múltiplos de 3" ¡Funciona muy bien!

Ahora bien, noté que cada vez que recorres el valor de múltiplo, no solo haces el cálculo para saber si el valor es múltiplo de 3, sino que también imprimes el valor, cada vez. Eso no suena muy productivo, suena más bien repetitivo. Observándolo bien, creo que podemos mejorar un poquito tu código para que en vez de imprimir cada vez que detecte un valor múltiplo de 3, solo imprima 1 vez en toda la aplicación. De esta forma mejoramos el rendimiento del algoritmo.

Por ejemplo, podríamos hacer lo siguiente:

public class testMultiplos {

    public static void main(String[] args) {
        String mensaje = ""; // Declara e inicializa String vacío

        // Recorre de 1 a 100; Calcula múltiplo de 3; Almacena el valor en mensaje
        for(int i = 1; i <= 100; i++){
            mensaje += (i % 3 == 0) ? "" + i + "\n": "";
        }

        System.out.println(mensaje); // Imprime mensaje
    }
}

Entonces, en esta otra solución en vez de declarar e inicializar un valor entero como 0, lo que hice fue declarar un valor de tipo String; una cadena, y la inicialicé como vacía.

Posteriormente, en vez de una sentencia while, preferí utilizar una sentencia for. Realmente la diferencia con la estructura de control no es importante, pudo ser while, puede ser for, lo que importa es el contenido del bloque.

Dentro del bloque for, utilicé un operador cuaternario. ¿Qué son los operadores cuaternarios? Son una forma rápida y más elegante para fabricar una sentencia homóloga al "if-else".

Su sintaxis es la siguiente:

( condición ) ? cumple : no cumple.

Entonces, si la condición entre paréntesis se cumple, se ejecuta lo que viene después del signo de interrogación, de lo contrario se ejecuta lo que viene después de los dos puntos.

Y en este caso en particular, si se cumple la condición de que el valor de i es múltiplo de 3, entonces ese valor se concatena al mensaje que hemos declarado más arriba como vacío. De lo contrario, a la cadena le concatenamos un valor vacío.

Y ya está. Solo hacemos esa operación al recorrer el valor de i 100 veces. Finalmente, solo imprimimos 1 vez por pantalla el valor de mensaje, que resulta ser la concatenación de todos los números múltiplos de 3.

Lo que hemos hecho aquí se llama "Refactorización". Vale decir, modificar el código para aplicar buenas prácticas o mejorar rendimiento, sin alterar el resultado del código. Ahora ya no es tan repetitivo, y el código se ve más elegante. ¡Yupi!

¡Espero esto te sirva para expandir tus conocimientos!

Muchas gracias!! Nunca habia usado esa forma del string para sacar una respuesta Antes, habia realizado este ejemplo de factorial

while(factorial<=10) { if (factorial==0) { total=1; factorial++; } else { total=total*factorial; factorial++; //System.out.println(total); } }

Siguiendo tu indicación, este seria mas eficiente String resultadofactorial=""; int factorial=0; int total=1; for(int i = 0; i <= 10; i++) { resultadofactorial += (i ==0) ? "" + 1 + "\n":total+"\n"; total=total*(i+1); } System.out.println(resultadofactorial);

    Muchas gracias por tu ayuda

¡Le has cogido el ritmo muy rápido, felicidades! Si, ahora tu resolución de factorial es sin duda más eficiente.

Siempre que termines de codificar una solución, detente unos segundos y revisa tu código buscando qué puedes mejorar. Es una excelente práctica. ¡Mucho éxito!