Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Sol.

import java.util.Scanner;

public class VerificarCompatibilidadDonarSangre {

static boolean esCompatible(int edad, float peso) {
    String motivo = "";
    if (edad < 18 || edad > 65) {
        motivo = "Debe tener entre 18 y 65 años.";
    }
    if (peso < 50) {
        motivo = "Debe pesar más de 65 kg.";
    }
    if (!motivo.isEmpty()) {
        System.out.println("Donante incompatible.");
        System.out.println("Motivo: " + motivo);
    }
    return edad < 65 && edad > 18 && peso > 50;
}

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int edad;
    float peso;

    System.out.print("Ingrese la edad del donante: ");
    edad = sc.nextInt();
    System.out.print("Ingrese el peso del donante (kg): ");
    peso = sc.nextFloat();

    if (esCompatible(edad, peso)) {
        System.out.println("Donante compatible");
    }

}

}

1 respuesta

Hola Michel, espero que estés bien

Parece que estás en el camino correcto con tu código, pero hay un pequeño error en la lógica que podría estar causando problemas. En tu función esCompatible, hay dos errores en las condiciones de los rangos de edad y peso que verificas. Vamos a revisarlos:

  1. La condición para la edad debería ser edad >= 18 && edad <= 65, ya que el donante debe tener entre 18 y 65 años, inclusive.
  2. En la verificación del peso, el mensaje de error debería ser "Debe pesar más de 50 kg." en lugar de "Debe pesar más de 65 kg."

Aquí tienes una versión corregida de tu código:

import java.util.Scanner;

public class VerificarCompatibilidadDonarSangre {

    static boolean esCompatible(int edad, float peso) {
        String motivo = "";
        if (edad < 18 || edad > 65) {
            motivo = "Debe tener entre 18 y 65 años.";
        }
        if (peso <= 50) {
            motivo += (motivo.isEmpty() ? "" : " ") + "Debe pesar más de 50 kg.";
        }
        if (!motivo.isEmpty()) {
            System.out.println("Donante incompatible.");
            System.out.println("Motivo: " + motivo);
            return false;
        }
        return true;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int edad;
        float peso;

        System.out.print("Ingrese la edad del donante: ");
        edad = sc.nextInt();
        System.out.print("Ingrese el peso del donante (kg): ");
        peso = sc.nextFloat();

        if (esCompatible(edad, peso)) {
            System.out.println("Donante compatible");
        }
    }
}

Con estos cambios, el programa debería funcionar como esperas, indicando correctamente si el donante es compatible o no, y proporcionando el motivo si no lo es.

Espero haber ayudado y buenos estudios!