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

Validacion de contraseña usando clases, Ayudaa

Holas, buenas, espero esten muy bien, resulta que quería probar estos ejercicios con clases, la cosa es que estoy en el actual de validar contraseñas, y no sé porque no me entra a preguntar el scanner de ingrese la contraseña, la salida me arroja algo así (Imagen):

Salida del ejercicio Validar Contraseña:

El ejercicio del problema se utiliza en el switch case 3:

Principal.java

import java.util.Scanner;
public class Principal {
    public static void main(String[] args) {
        int op;
        System.out.print(" \n MENU");
        System.out.print(" \n1. Adivina si un numero es par o Impar ");

        Scanner scanner = new Scanner(System.in);
        System.out.println();
        System.out.print(" \n Ingresa la opcion deseada");
        op = scanner.nextInt();

        switch (op){
            case 1: //FUNCIONA
                System.out.println("Ingrese el numero a identificar: ");
                int num = scanner.nextInt();
                Numeros numero= new Numeros(num);
                numero.espar();
                break;
            case 2: //FUNCIONA
                System.out.println("Ingrese la nota a identificar: ");
                double prom = scanner.nextDouble();
                Aprobacion promedio = new Aprobacion(prom);
                promedio.promedio();
                break;

            case 3: //Error de lectura de contraseña, ayudenmen porfis c:
                System.out.print("Ingrese la contraseña: ");
                String intentoContrasena = scanner.nextLine();
                Validar contrasena = new Validar("123123", intentoContrasena);
                contrasena.validacionpasw();
                break;
        }
    }
}

===================== Validar.java


public class Validar {
    String intentoContrasena;
    String contrasenaCorrecta ;

    public Validar(String contrasenaCorrecta, String intentoContrasena) {
        this.contrasenaCorrecta = contrasenaCorrecta;
        this.intentoContrasena = intentoContrasena;
    }

    public void validacionpasw(){
        if (this.intentoContrasena.equals(this.contrasenaCorrecta)) {
            System.out.println("¡Acceso permitido!");
        } else {
            System.out.println("¡Acceso denegado!");
        }
    }
}

Siento que el archivo de Validar.java es un pooc ineficiente con la contraseña correcta, o no sé cual sería la mejor opcion o la más pertinente, porqué intenté colocar un setter y no sé me generaba error en validarpasw();

Muchas gracias por la ayuda :3

1 respuesta

Hola, Cindy. Espero que estés bien.

El problema que estás experimentando se debe a cómo el Scanner está manejando la entrada después de leer un número.

Cuando usas nextInt() para leer la opción del menú, el Scanner no consume el carácter de nueva línea (enter), por lo que cuando llamas a nextLine() para leer la contraseña, este método lee el resto de la línea actual, que está vacía.

Para solucionar este problema, puedes agregar una línea adicional para consumir el carácter de nueva línea después de leer la opción del menú. Aquí te muestro cómo hacerlo:

import java.util.Scanner;

public class Principal {
    public static void main(String[] args) {
        int op;
        System.out.print(" \n MENU");
        System.out.print(" \n1. Adivina si un numero es par o Impar ");
        System.out.print(" \n2. Adivina si pasaste con tu promedio actual ");
        System.out.print(" \n3. Valida si tu contraseña es correcta");

        Scanner scanner = new Scanner(System.in);
        System.out.println();
        System.out.print(" \n Ingresa la opcion deseada");
        op = scanner.nextInt();
        scanner.nextLine(); // Consumir el salto de línea pendiente

        switch (op) {
            case 1: // FUNCIONA
                System.out.println("Ingrese el numero a identificar: ");
                int num = scanner.nextInt();
                Numeros numero = new Numeros(num);
                numero.espar();
                break;
            case 2: // FUNCIONA
                System.out.println("Ingrese la nota a identificar: ");
                double prom = scanner.nextDouble();
                Aprobacion promedio = new Aprobacion(prom);
                promedio.promedio();
                break;
            case 3: // Error de lectura de contraseña, ayudenmen porfis c:
                System.out.print("Ingrese la contraseña: ");
                String intentoContrasena = scanner.nextLine();
                Validar contrasena = new Validar("123123", intentoContrasena);
                contrasena.validacionpasw();
                break;
        }
    }
}

Con este cambio, el Scanner debería funcionar correctamente y permitirte ingresar la contraseña como esperas.

Espero haber ayudado y buenos estudios!