R6 – Clase PsicoHistoriador (Fundación)


RETO 1: Clase PsicoHistoriador (Fundación)

Contexto

Formas parte del Proyecto Seldon, dentro del universo de Fundación. Vas a modelar a un psico-historiador, un especialista capaz de analizar el futuro del Imperio mediante matemáticas y sociología.

Objetivo

Crear una única clase en Java que represente a un psico-historiador. Este reto sirve para practicar atributos privados, constructores, getters, setters y métodos simples. No se permite utilizar listas, arrays, ni otras clases.

Instrucciones

1. Nombre de la clase
La clase debe llamarse PsicoHistoriador.

2. Atributos privados obligatorios

Debes declarar:

  • String nombre;
  • int nivelMatematico; (0 a 100)
  • boolean lealtadFundacion;
  • int prediccionesRealizadas;

3. Constructor
El constructor debe recibir String nombre e int nivelMatematico.

El resto se inicializa así:
lealtadFundacion = true;
prediccionesRealizadas = 0;

4. Getters y setters
Implementa métodos getter y setter para los atributos necesarios, al menos los siguientes:

  • getNombre()
  • getNivelMatematico() y setNivelMatematico(int n)
  • isLealtadFundacion() y setLealtadFundacion(boolean v)
  • getPrediccionesRealizadas()

5. Método realizarPrediccion()
Cada vez que se llame:

  • Aumenta en 1 prediccionesRealizadas.
  • Calcula una probabilidad usando nivelMatematico.
  • Devuelve un texto como:
    “El psico-historiador NOMBRE calcula una probabilidad de colapso del Imperio del X%.”

6. Método evaluarRiesgoImperial()
Debe devolver un mensaje según el valor de nivelMatematico:

  • Mayor de 80 → “Riesgo alto: el Imperio se derrumbará pronto.”
  • Entre 50 y 80 → “Riesgo moderado: el Plan Seldon sigue estable.”
  • Menor de 50 → “Riesgo bajo: estabilidad aparente, pero no te fíes.”

7. Método main
La misma clase debe contener un main que:

  • Cree un objeto PsicoHistoriador.
  • Llame a realizarPrediccion() varias veces e imprima el resultado.
  • Llame a evaluarRiesgoImperial() y muestre el mensaje final.

RETO 2: Clase NaveEstelarFundacion (Constructores y Aleatoriedad)

La Fundación mantiene una flota de naves estelares para explorar la galaxia. En este ejercicio practicarás atributos privados, varios constructores y el uso de un método auxiliar que genera valores aleatorios.

Objetivo

Crear la clase NaveEstelarFundacion implementando tres constructores, getters, setters, un método aleatorio proporcionado y un pequeño main de prueba. No se permite el uso de listas, arrays ni otras clases.

Instrucciones

1. Nombre de la clase
La clase debe llamarse NaveEstelarFundacion.

2. Atributos privados

  • String nombre;
  • String modelo;
  • int escudo;
  • int velocidadMaxima;
  • int misionesCompletadas;

3. Método auxiliar ya proporcionado (NO modificar)

private int generarAleatorio(int min, int max) { return (int)(Math.random() * (max - min + 1)) + min; } 

4. Constructores obligatorios

a) Constructor sin parámetros
Debe asignar valores por defecto, por ejemplo:

  • nombre = "Anonima"
  • modelo = "Basico"
  • escudo = 50
  • velocidadMaxima = 2000
  • misionesCompletadas = 0

b) Constructor con parámetros (nombre y modelo)
Debe asignar los valores recibidos y generar:

  • escudo aleatorio entre 40 y 90
  • velocidadMaxima aleatoria entre 1500 y 4000
  • misionesCompletadas = 0

c) Constructor con todos los atributos
Debe recibir y asignar todos los campos: nombre, modelo, escudo, velocidadMaxima y misionesCompletadas.

5. Getters y setters
Debes implementar getters y setters para todos los atributos.

6. Método desplegar()
Devuelve un texto con los datos de la nave:

"La nave NOMBRE, modelo MODELO, se despliega con escudo ESCUDO% y velocidad máxima VELOCIDAD km/s." 

7. Método registrarMision()
Aumenta en 1 el contador misionesCompletadas.

8. Main de prueba
Debe:

Aumentar misiones con registrarMision() y mostrar el total.

Crear una nave con el constructor por defecto.

Crear otra con el constructor de dos parámetros.

Crear una con el constructor completo.

Llamar a desplegar() en cada una.