Test de Java 21 para estudiantes de programación (incluye bases de Java y estructuras de control) {CV.A + P}
1
¿Cuál de las siguientes opciones genera un número aleatorio entero entre -10 y 10 (ambos incluidos) en Java?
2
El siguiente bucle debería mostrar todos los múltiplos de 100 entre -1000 y 1000 (ambos incluidos), pero no lo hace. ¿Cómo podrías arreglarlo?
3
¿En qué circunstancias el siguiente programa continuará ejecutando las instrucciones que hay más abajo del bucle?
4
¿Qué sale por la pantalla al ejecutar este bucle?
5
¿Qué ocurre al intentar compilar y ejecutar este código?
6
¿Qué mensaje o mensajes aparecen en la pantalla al ejecutar este código si tecleamos la letra “A” en lugar de un número?
7
El sumatorio de un número N se define como N + (N-1) + (N-2) + … + 1. Por ejemplo, el sumatorio de 5 es 5 + 4 + 3 + 2 + 1, es decir, 15. El siguiente código intenta calcular el sumatorio de un número n, pero quizá contenga un error. ¿Sabrías encontrarlo y solucionarlo?
8
¿Cuántas veces se imprime la letra A si ejecutamos el siguiente código?
9
A continuación tienes una serie de condicionales anidados. ¿Cómo se pueden simplificar en una sola condición if-else?
10
¿Qué imprimirá este bucle?
Explicación
✏️ Explicación:
Math.random() devuelve un double, al hacer casting con (int) quitamos los decimales, Math.floor() también quita los decimales, pero devuelve un double, por lo que dejará, por ejemplo, de 5.65 -> 5.0 mientras que un casting (int) 5.65 -> 5.
Ahora, lo que tenemos aquí es una generación de un rango de números aleatorios personalizado, del tipo cerrado [-10,10]. En nuestros ejemplos:
Nota: En los rangos "[" significa, rango cerrado, número incluido, en nuestro caso, -10 y 10 incluidos
// Genera un número al azar (Personalizado) Entre 5 y 10 (sí llega a 10)
int min2 = 5;
int max2 = 10;
System.out.println("(Personalizado) Entre 5 y 10 (sí llega a 10) → " + (int) ((Math.random() * (max2 - min2 + 1)) + min2));
Sí sustituimos la fórmula para el rango [-10,10] nos queda:
int min2 = -10;
int max2 = 10;
System.out.println("(Personalizado) Entre -10 y 10 (sí llega a 10) → " + (int) ((Math.random() * (10 - (-10) + 1)) + (-10)));
Recordamos la multiplicación de signos:
- * - = +
+ * - = -
Por tanto, resolvemos:
System.out.println("(Personalizado) Entre -10 y 10 (sí llega a 10) → " + (int) ((Math.random() * (10 + 10) + 1)) -10));
Por tanto, nos queda:
System.out.println("(Personalizado) Entre -10 y 10 (sí llega a 10) → " + (int) ((Math.random() * 20 + 1) -10));
Y finalmente:
System.out.println("(Personalizado) Entre -10 y 10 (sí llega a 10) → " + (int) (Math.random() * 21) - 10));
✏️ Explicación:
Actualmente, imprime:
[-900, -800, -700, -600, -500, -400, -300, -200, -100, 0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000]
Ya que en la primera vuelta se hace a = -1000 + 100, donde según la multiplicación de signos:
+ * - = -
por tanto, se resta a = -900, sería negativo, ya que el número mayor define el signo y este es negativo (matemáticas 😏)
La corrección correcta, sería "En la línea 1, cambiando la inicialización de la variable a por esto: int a = -1100",
ya que al inicializar en -1100, la primera resta sería -1100 + 100 = -1000, así conseguimos:
[-1000, -900, -800, -700, -600, -500, -400, -300, -200, -100, 0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000]
✏️ Explicación:
Ejemplo de ejecución:
Introduzca un número positivo: -1
Introduzca un número positivo: -7
Introduzca un número positivo: -4
Introduzca un número positivo: 0
Introduzca un número positivo: -1
Introduzca un número positivo: -1
Introduzca un número positivo: 0
Introduzca un número positivo: 2
Salió del bucle 🚀
La condición de salida, del bucle, se produce cuando número <= 0 == false, ya que los bucles,
se siguen ejecutando mientras la condición sea true.
Por ejemplo,
-7 <= 0 ➡️ true, se sigue ejecutando,
0 <= 0 ➡️ true, se sigue ejecutando,
5 <= 0 ➡️ false, sale del bucle y se ejecuta el resto del programa
✏️ Explicación:
El mínimo es el 1, ya que en la 1º ejecución del bucle:
a = 0;
b = a + 2;
b = 0 + 2;
b = 2;
a = b - 1;
a = 2 - 1;
a = 1;
System.out.print(b + " " + a + " ");
Imprime: 2 1
En las últimas ejecuciones:
a = 98
b = 99
La condición del bucle a < 100 es true,
a = 99
b = 100
La condición del bucle a < 100 es true,
En la última ejecución:
a = 100
b = 101
Se imprime 101 100
✏️ Explicación:
Recuerda que todo lo que llega a la consola, es texto (String),
por tanto en un System.out.println(a + b); , tienen prioridad los String,
todo se autoconvierte a String y el "+" actuaría como unión de String (concatenación)
😎 Mini reto: ¿Cómo conseguirías que salga 20 en la consola?
✏️ Explicación:
Si le pasamos un String que no corresponde con un número ("12", "77" ...) a Integer.parseInt(), nos dará una excepción (java.lang.NumberFormatException: For input string: "A"), por lo que escribe "Error" y pone a = 0, recuerda que el "finally" se ejecuta siempre, falle o no el programa
✏️ Explicación:
Las variables acumuladoras de tipo "+" normalmente suelen empezar en 0 para no alterar
el resultado. Con las de tipo "*" se empieza por 1
✏️ Explicación:
El bucle padre ejecuta 2 veces al hijo, el cual imprimer en la 1º tanta 4 "A" y en la 2º otras 4 "A",
donde finalmente tenemos 8 "A"
✏️ Explicación:
Recuerda las operaciones lógicas de 3 operandos:
true && false && true → false
true && true && true → true (por este se puede simplificar)
true && !true && true → false
true || false || true → true
true || false || false → true
!true || false || false → false
✏️ Explicación:
Es un bucle a la inversa, comienza en 5 y baja hasta 1
|