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

[Sugerencia] Mi propuesta de solución...

A tener en cuenta:

  • Me apoyo de Integer.parseInt(String value) para pasar un String a entero.
  • Me apoyo del catch para controlar la excepción NumberFormatException que arroja parseInt.
import java.util.Scanner;

public class AccessControl {
    public static void main(String[] args) {
        String DEFAULT_CODE = "2023";
        Scanner scanner = new Scanner(System.in);
        String accessCode;
        String permissionLevel;

        showHeader();

        System.out.print("* Ingrese el código de acceso: ");
        accessCode = scanner.next();
        System.out.print("* Ingrese el nivel de permiso: ");
        permissionLevel = scanner.next();
        processData(DEFAULT_CODE, accessCode, permissionLevel);

        System.out.println("Closing app... Thanks for using our service");

        scanner.close();
    }

    private static void processData(String defaultCode, String userCode, String permissionLevel) {
        String motivo = "";
        if (!defaultCode.equals(userCode)) {
            motivo = motivo.concat("Código incorrecto.");
        }
        try {
            int level = Integer.parseInt(permissionLevel);
            if (level > 3 || level < 1) {
                motivo = motivo.concat(" Nivel de permiso inválido.");
            }
        } catch (NumberFormatException _) {
            motivo = motivo.concat(" Nivel de permiso inválido.");
        }

        if (motivo.isEmpty()) System.out.println("\nAcceso permitido. ¡Bienvenido al sistema!\n");
        else System.out.printf("""
                
                Acceso no permitido.
                %s
                
                """, motivo.trim());
    }

    private static void showHeader() {
        System.out.print("""
                
                ************************************
                    Welcome to access control app
                ************************************
                
                """);
    }
}
1 respuesta

¡Hola Wilmar, espero que estés bien!

Tu propuesta de solución se ve bastante bien y parece cumplir con los requisitos del ejercicio que estás haciendo. Has implementado correctamente el uso de Integer.parseInt() para convertir el nivel de permiso de String a int y has manejado la excepción NumberFormatException para asegurarte de que el nivel de permiso sea numérico.

Aquí tienes un par de puntos que podrías considerar para mejorar o ajustar tu código:

  1. Mensajes de Error Claros: Estás concatenando los motivos de error en una sola cadena. Esto es bueno, pero asegúrate de que los mensajes sean claros para el usuario. Por ejemplo, podrías agregar un punto o un salto de línea entre los mensajes para que sean más legibles.

  2. Uso de Constantes: Aunque has definido DEFAULT_CODE como una constante dentro del main, podrías considerar definirlo como final para que quede claro que no cambiará durante la ejecución del programa.

  3. Validación Adicional: Asegúrate de que el programa se comporte correctamente si el usuario ingresa un nivel de permiso que no sea un número. Tu manejo de excepciones ya cubre esto, pero siempre es bueno probar diferentes entradas para verificar que el programa responde como se espera.

Esto asegura que haya un espacio entre los mensajes concatenados, mejorando la legibilidad.

Espero que estas sugerencias te sean útiles y te ayuden a mejorar aún más tu código. ¡Bons estudios!