R3.2 [Solución] 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.

Base común: generar calidad 0–100

Usaremos:





Random r = new Random(); int calidad = r.nextInt(101); // 0..100 (incluye 100)

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

Objetivo: de 1000 pastillas, contar cuántas tienen calidad > 90 (ojo: tu historia dice “≥90”, pero el reto 1 pide “superior a 90” → >90).

Idea

  • Bucle for de 1 a 1000
  • Generar calidad
  • Si calidad > 90, incrementamos contador

Código





import java.util.Random;

public class Reto1RecuentoLote {
    public static void main(String[] args) {
        Random r = new Random();

        int total = 1000;
        int buenas = 0;

        for (int i = 1; i <= total; i++) {
            int calidad = r.nextInt(101); // 0..100

            if (calidad > 90) {           // superior a 90
                buenas++;
            }
        }

        System.out.println("Pastillas totales: " + total);
        System.out.println("De calidad superior: " + buenas);
    }
}

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.

Objetivo: repetir intentos hasta que salga calidad 100, mostrar cuántos intentos.

Idea

  • Bucle while o do-while
  • Contador de intentos
  • Se para cuando calidad == 100

Código





import java.util.Random;

public class Reto2RecetaPerfecta {
    public static void main(String[] args) {
        Random r = new Random();

        int intentos = 0;
        int calidad;

        do {
            calidad = r.nextInt(101);
            intentos++;
        } while (calidad != 100);

        System.out.println("¡Perfecta! Calidad 100 obtenida tras " + intentos + " intentos.");
    }
}

Por qué do-while: garantiza al menos un intento (tiene sentido aquí).


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.


Objetivo: producir hasta conseguir 1000 buenas (≥90), y mostrar cuántas totales se produjeron.

Idea

  • buenas llega a 1000
  • totales cuenta todas, buenas y malas
  • Condición buena: calidad >= 90

Código





import java.util.Random;

public class Reto3ProduccionNocturna {
    public static void main(String[] args) {
        Random r = new Random();

        int buenas = 0;
        int totales = 0;

        while (buenas < 1000) {
            int calidad = r.nextInt(101);
            totales++;

            if (calidad >= 90) {
                buenas++;
            }
        }

        System.out.println("Para conseguir 1000 pastillas buenas, produjeron un total de " + totales + ".");
    }
}

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


Objetivo: 10 lotes de 100, contar buenas (≥90) por lote.

Idea

  • Bucle externo: lotes 1..10
  • Bucle interno: 100 pastillas
  • Contador buenasLote reiniciado en cada lote

Código





import java.util.Random;

public class Reto4AnalisisPorLotes {
    public static void main(String[] args) {
        Random r = new Random();

        int lotes = 10;
        int tamLote = 100;

        for (int lote = 1; lote <= lotes; lote++) {
            int buenasLote = 0;

            for (int i = 1; i <= tamLote; i++) {
                int calidad = r.nextInt(101);
                if (calidad >= 90) {
                    buenasLote++;
                }
            }

            System.out.println("Lote " + lote + " \u2192 " + buenasLote + " pastillas buenas");
        }
    }
}

RETO 5: “Promedio de calidad”

Calcular el promedio total de calidad de las 1000 pastillas.

Salida:

Promedio de calidad general: 72.38


Objetivo: promedio de calidad de 1000 pastillas.

Idea

  • Acumulador sumaCalidades
  • Tras el bucle: promedio = suma / total
  • Para mostrar con 2 decimales: System.out.printf

Código





import java.util.Random;

public class Reto5PromedioCalidad {
    public static void main(String[] args) {
        Random r = new Random();

        int total = 1000;
        int sumaCalidades = 0;

        for (int i = 1; i <= total; i++) {
            int calidad = r.nextInt(101);
            sumaCalidades += calidad;
        }

        double promedio = (double) sumaCalidades / total;

        System.out.printf("Promedio de calidad general: %.2f%n", promedio);
    }
}

Detalle clave: el casteo a double evita división entera.

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

Objetivo: generar pastillas hasta tener 500 buenas (≥90), pero cada vez que haya 50 malas seguidas, imprimir:

Gus Fring sospecha del laboratorio...

Idea

  • Contador buenas hasta 500
  • Contador malasSeguidas que:
    • aumenta si sale mala (<90)
    • se reinicia a 0 si sale buena
  • Cuando malasSeguidas == 50, avisamos y reiniciamos (o seguimos contando, tú eliges; aquí reiniciamos para no spamear).

Código

import java.util.Random;

public class Reto6InspeccionGusFring {
    public static void main(String[] args) {
        Random r = new Random();

        int buenas = 0;
        int totales = 0;
        int malasSeguidas = 0;

        while (buenas < 500) {
            int calidad = r.nextInt(101);
            totales++;

            if (calidad >= 90) {
                buenas++;
                malasSeguidas = 0; // racha de malas se rompe
            } else {
                malasSeguidas++;
            }

            if (malasSeguidas == 50) {
                System.out.println("🔥 Gus Fring sospecha del laboratorio...");
                malasSeguidas = 0; // reiniciamos para volver a detectar otra racha de 50
            }
        }

        System.out.println("Buenas conseguidas: " + buenas);
        System.out.println("Pastillas producidas en total: " + totales);
    }
}