R3.2 Programación-Bucles

Walter White y Jesse Pinkman han cocinado 1000 pastillas de «mentaanfetamienta» en su caravana.

Cada pastilla tiene una calidad aleatoria entre 0 y 100.

El “señor del pollo” (Gus Fring) solo acepta aquellas con calidad mayor o igual que 90.

RETO 1: “El recuento del lote”

Calcular cuántas pastillas tienen una calidad superior a 90.

Pistas:

  • Usa Random para generar números del 0 al 100.
  • Usa un for para simular las 1000 pastillas.
  • Usa un contador para las “buenas”.

Ejemplo de salida:

Pastillas totales: 1000
De calidad superior: 128

RETO 2: “Hasta lograr la receta perfecta”

Walter repite la cocción hasta que consiga una pastilla con calidad 100.

Pistas:

  • Genera números aleatorios entre 0 y 100.
  • Detén el bucle cuando salga 100.
  • Muestra cuántos intentos necesitó.

Ejemplo:

¡Perfecta! Calidad 100 obtenida tras 57 intentos.

RETO 3: “La producción nocturna”

Walter y Jesse producen pastillas hasta llegar a 1000 unidades buenas (≥90).

Muestra cuántas totales han hecho (incluyendo las malas).

Ejemplo:

Para conseguir 1000 pastillas buenas, produjeron un total de 8732.

RETO 4: “El análisis por lotes”

Dividir la producción en 10 lotes de 100 pastillas y mostrar cuántas buenas hay en cada lote.

Salida esperada:

Lote 1 → 13 pastillas buenas
Lote 2 → 8 pastillas buenas
...
Lote 10 → 11 pastillas buenas


RETO 5: “Promedio de calidad”

Calcular el promedio total de calidad de las 1000 pastillas.

Salida:

Promedio de calidad general: 72.38


RETO 6 (extra): “La inspección de Gus Fring”

Genera pastillas hasta tener 500 buenas, pero cada vez que salgan 50 malas seguidas, muestra:

🔥 Gus Fring sospecha del laboratorio...

Ayuda:

Chuleta Java – Math, Random y String


🔹 Clase Math (no necesita crear objeto)

Usa directamente: Math.metodo()

MétodoDescripciónEjemploResultado
Math.abs(x)Valor absolutoMath.abs(-5)5
Math.max(a,b)Mayor de dos valoresMath.max(8,3)8
Math.min(a,b)Menor de dos valoresMath.min(8,3)3
Math.pow(a,b)Potencia (a^b)Math.pow(2,3)8.0
Math.sqrt(x)Raíz cuadradaMath.sqrt(9)3.0
Math.round(x)Redondea al entero más cercanoMath.round(3.6)4
Math.floor(x)Redondea hacia abajoMath.floor(3.9)3.0
Math.ceil(x)Redondea hacia arribaMath.ceil(3.1)4.0
Math.random()Número aleatorio entre 0 y 1Math.random()0.0–0.999...
Math.PIConstante πMath.PI3.14159…
Math.EConstante eMath.E2.71828…

Ejemplo práctico:

double area = Math.PI * Math.pow(5, 2);


🎲 Clase Random

Primero importa y crea el objeto:

import java.util.Random;
Random r = new Random();

MétodoDescripciónEjemploResultado
r.nextInt(n)Entero entre 0 y n-1r.nextInt(10)0–9
r.nextInt(max - min + 1) + minEntero entre min y maxr.nextInt(21) + 8080–100
r.nextDouble()Decimal entre 0.0 y 1.0r.nextDouble()0.0–0.999...
r.nextBoolean()Verdadero o falsor.nextBoolean()true / false

Ejemplo:

int dado = r.nextInt(6) + 1; // 1 a 6


🧵 Clase String

Recuerda: los String son objetos, y sus métodos se invocan sobre la variable:

texto.metodo()

MétodoDescripciónEjemploResultado
length()Longitud del texto"Hola".length()4
charAt(i)Carácter en posición i"Hola".charAt(1)'o'
toUpperCase()Convierte a mayúsculas"hola".toUpperCase()"HOLA"
toLowerCase()Convierte a minúsculas"HOLA".toLowerCase()"hola"
equals(cadena)Compara textos (sensible a mayúsculas)"Hola".equals("hola")false
equalsIgnoreCase(cadena)Compara ignorando mayúsculas/minúsculas"Hola".equalsIgnoreCase("hola")true
substring(inicio, fin)Extrae parte del texto"Java".substring(1,3)"av"
indexOf(cadena)Posición de una subcadena"Hola".indexOf("la")2
contains(cadena)¿Contiene la subcadena?"Hola".contains("Ho")true
startsWith(prefijo)¿Empieza por…?"Hola".startsWith("Ho")true
endsWith(sufijo)¿Termina en…?"Hola".endsWith("la")true
trim()Elimina espacios al inicio y final" Hola ".trim()"Hola"
replace(a, b)Sustituye texto"Hola".replace("a","e")"Hole"

Ejemplo combinado:

String nombre = " Antonio ";
System.out.println(nombre.trim().toUpperCase());


⚗️ Extra para curiosos

Rango aleatorio con Math (sin Random):

int n = (int)(Math.random() * 21) + 80; // 80–100