
Ejercicio validación Pin o como enfrentarte a un tanque con un tirachinas.
Publicado por Javi (18 intervenciones) el 04/11/2022 23:32:21
Hola compañeros. daros las gracias de antemano. Soy alumno de 1º de DAM a distancia. Nos dan unos apuntes desfasados y sin clases. Un poquito de de do-while, else else if, switch case. Y con eso ta mandan la tarea. Un par de ejercicios "decentes" por ser la segunda tarea.....pero. PUM buscarse la vida con esto:
Cada vez que un cliente de un banco desea acceder a sus cuentas a través de una plataforma de banca electrónica, se le solicitan dos posiciones aleatorias de su PIN de seis dígitos.
En pantalla aparecerá una representación del PIN con cada dígito enmascarado mediante un carácter asterisco ('*') excepto los las dos posiciones que se solicitan, que estarán enmascaradas por guiones bajos o subrayados ('_'). Por ejemplo, para el caso de las posiciones 2 y 5, se mostraría algo como:
Para acceder al sistema debe introducir el contenido de las posiciones 2 y 5 de su pin:
*_**_*
Tras esto se solicitará primero el primer dígito:
Introduzca contenido de la posición 2 del PIN:
y a continuación el segundo dígito:
Introduzca contenido de la posición 5 del PIN:
Una vez introducidos los dos dígitos se comprobarán si coinciden realmente con los del PIN. Si no es así, volverán a solicitarse esos mismos dígitos. Se pedirán hasta un máximo de tres veces. Si se introducen correctamente, se entrará en el sistema. Si no se introducen correctamente en ninguno de los tres intentos, entonces se bloqueará el sistema y no se permitirá entrar. Hay que tener en cuenta que, una vez generadas las dos posiciones aleatorias, no se vuelven a generar, sino que se preguntan siempre las mismas.
Escribe un programa en Java que simule la entrada en ese sistema llevando a cabo las siguientes acciones:
generamos un PIN aleatorio de seis dígitos, que se almacenará en un String y se mostrará por pantalla. Esto nos servirá para que el PIN no sea siempre el mismo y de ese modo podamos simular una situación más "real". Obviamente, en la realidad no aparecería el PIN por pantalla, pues entonces el resto del proceso carecería de sentido. Hacemos esto para que podamos probar cada vez con un PIN distinto sin tener que escribirlo nosotros por teclado o incluirlo como constante en el programa. Esta parte se te proporciona ya resuelta en la plantilla de tu programa utilizando la herramienta Utilidades.generaPin();
generamos dos números aleatorios entre 1 y 6 que sean diferentes y que representan dos posiciones aleatorias del PIN. Para ello, puedes realizar lo siguiente:
generamos un primer número. Puedes utilizar la herramienta Utilidades.numAleatorio(1, 6), que te prorporcionará un número entero aleatorio entre 1 y 6;
generamos un segundo número. Hemos de tener en cuenta que deben ser dos números diferentes. Eso significa que tendrás que asegurarte de que el segundo número que obtengas, no coincida con el primero. Si coincidiera, tendrías que volver a generar ese segundo número hasta que no coincidiera. Esto puedes resolverlo fácilmente con un bucle do-while.
Una vez tengas dos números aleatorios diferentes, asegúrate de que el primero es menor que el segundo. Si no es así, simplemente puedes intercambiar el contenido de las variables donde los tengas almacenados;
creamos una cadena (String) con el PIN "enmascarado" teniendo en cuenta las reglas que se nos han indicado anteriormente (con asteriscos y subrayados). Debes hacerlo mediante un bucle for que vaya acumulando en el String caracteres del tipo asterisco ('*') o subrayado ('_'), según toque. Se trataría de un acumulador de tipo cadena, donde su valor inicial debería ser la cadena vacía y va "creciendo" mediante el operador de concatenación de cadenas;
mostramos por pantalla el PIN "enmascarado" indicando las dos posiciones que se solicitan;
solicitamos esas posiciones al usuario y se lleva a cabo la comprobación (tres intentos como máximo):
solicitamos la primera posición. Para obtener un único carácter (char) que luego puedas comparar con una posición de una cadena (charAt), puedes hacer la siguiente lectura de teclado: teclado.nextLine().charAt(0);
solicitamos la segunda posición;
comprobamos si lo introducido por el usuario es correcto (esos valores coinciden con los contenidos de las posiciones del PIN solicitadas).
Una vez finalizada la entrada de posiciones (bien porque se hayan introducido valores válidos bien porque se hayan consumidos los tres intentos), se procederá a:
Si la entrada fue válida (los dos componentes del PIN introducidos han sido correctos), se procederá a crear una nueva cadena (String) con el PIN "enmascarado" teniendo en cuenta que en esta ocasión tendrás que "desenmascarar" las dos posiciones que se han introducido. Debes hacerlo nuevamente mediante un bucle for que vaya acumulando en el String caracteres del tipo asterisco ('*') o numérico, según toque. Tras eso se indicará que el PIN es correcto y que se procede al entrar en el sistema;
Si la entrada no fue válida (se consumieron los tres intentos sin conseguirlo), entonces simplemente se mostrará por pantalla un mensaje del tipo "Ha introducido tres veces un PIN incorrecto. Sistema bloqueado".
Os agradecería la más mínima ayuda. Porque llevo una semana dándome cabezazos con el poco material que nos dan.
Éste es el proyecto base que debemos cumplir:
package tarea02;
import java.util.Scanner;
import libtarea2.Utilidades;
/**
* Ejercicio 5. Validación de PIN.
* @author Indicar nombre de alumno/a
*/
public class Ejercicio05 {
public static void main(String[] args) {
//----------------------------------------------
// Declaración de variables
//----------------------------------------------
// Variables de entrada
// Variables de salida
// Variables auxiliares
String pin;
// Clase Scanner para petición de datos de entrada
Scanner teclado = new Scanner(System.in);
//----------------------------------------------
// Entrada de datos + Procesamiento
//----------------------------------------------
System.out.println("VALIDACIÓN DE PIN");
System.out.println("-----------------");
// 1. Creamos el PIN de seis dígitos
pin = Utilidades.generaPin();
System.out.println ("Creando un número de identificación personal de seis dígitos: " + pin);
// 2. Generamos aleatoriamente dos posiciones aleatorias y diferentes entre la 1 y la 6
// 2.1. Generamos primer número
// 2.2. Generamos segundo número garantizando que va a ser diferente al primero
// 2.3. Si el primer número es superior al segundo, los intercambiamos
// 3. Creamos el String con el PIN "enmascarado"
// 4. Mostramos el PIN enmascarado por pantalla e indicamos las posiciones que se deben introducir
// 5. Solicitamos esas posiciones al usuario y se lleva a cabo la comprobación (tres intentos como máximo)
// 5.1. Solicitamos primera posición aleatoria del PIN
// 5.2. Solicitamos segunda posición aleatoria del PIN
// 5.3. Comprobación de lo introducido frente al PIN
//----------------------------------------------
// Salida de Resultados
//----------------------------------------------
System.out.println();
System.out.println("RESULTADO");
System.out.println("---------");
// 6. Mostramos un resultado
// 6.1. Si el PIN es válido: Creamos el String con el PIN "enmascarado" desenmascarando la dos posiciones solicitadas e indicando el éxito
// 6.2. Si el PIN no es válido: Se indica que no se ha logrado introducir un PIN correcto y que el sistema se bloqueará
}
}
Cada vez que un cliente de un banco desea acceder a sus cuentas a través de una plataforma de banca electrónica, se le solicitan dos posiciones aleatorias de su PIN de seis dígitos.
En pantalla aparecerá una representación del PIN con cada dígito enmascarado mediante un carácter asterisco ('*') excepto los las dos posiciones que se solicitan, que estarán enmascaradas por guiones bajos o subrayados ('_'). Por ejemplo, para el caso de las posiciones 2 y 5, se mostraría algo como:
Para acceder al sistema debe introducir el contenido de las posiciones 2 y 5 de su pin:
*_**_*
Tras esto se solicitará primero el primer dígito:
Introduzca contenido de la posición 2 del PIN:
y a continuación el segundo dígito:
Introduzca contenido de la posición 5 del PIN:
Una vez introducidos los dos dígitos se comprobarán si coinciden realmente con los del PIN. Si no es así, volverán a solicitarse esos mismos dígitos. Se pedirán hasta un máximo de tres veces. Si se introducen correctamente, se entrará en el sistema. Si no se introducen correctamente en ninguno de los tres intentos, entonces se bloqueará el sistema y no se permitirá entrar. Hay que tener en cuenta que, una vez generadas las dos posiciones aleatorias, no se vuelven a generar, sino que se preguntan siempre las mismas.
Escribe un programa en Java que simule la entrada en ese sistema llevando a cabo las siguientes acciones:
generamos un PIN aleatorio de seis dígitos, que se almacenará en un String y se mostrará por pantalla. Esto nos servirá para que el PIN no sea siempre el mismo y de ese modo podamos simular una situación más "real". Obviamente, en la realidad no aparecería el PIN por pantalla, pues entonces el resto del proceso carecería de sentido. Hacemos esto para que podamos probar cada vez con un PIN distinto sin tener que escribirlo nosotros por teclado o incluirlo como constante en el programa. Esta parte se te proporciona ya resuelta en la plantilla de tu programa utilizando la herramienta Utilidades.generaPin();
generamos dos números aleatorios entre 1 y 6 que sean diferentes y que representan dos posiciones aleatorias del PIN. Para ello, puedes realizar lo siguiente:
generamos un primer número. Puedes utilizar la herramienta Utilidades.numAleatorio(1, 6), que te prorporcionará un número entero aleatorio entre 1 y 6;
generamos un segundo número. Hemos de tener en cuenta que deben ser dos números diferentes. Eso significa que tendrás que asegurarte de que el segundo número que obtengas, no coincida con el primero. Si coincidiera, tendrías que volver a generar ese segundo número hasta que no coincidiera. Esto puedes resolverlo fácilmente con un bucle do-while.
Una vez tengas dos números aleatorios diferentes, asegúrate de que el primero es menor que el segundo. Si no es así, simplemente puedes intercambiar el contenido de las variables donde los tengas almacenados;
creamos una cadena (String) con el PIN "enmascarado" teniendo en cuenta las reglas que se nos han indicado anteriormente (con asteriscos y subrayados). Debes hacerlo mediante un bucle for que vaya acumulando en el String caracteres del tipo asterisco ('*') o subrayado ('_'), según toque. Se trataría de un acumulador de tipo cadena, donde su valor inicial debería ser la cadena vacía y va "creciendo" mediante el operador de concatenación de cadenas;
mostramos por pantalla el PIN "enmascarado" indicando las dos posiciones que se solicitan;
solicitamos esas posiciones al usuario y se lleva a cabo la comprobación (tres intentos como máximo):
solicitamos la primera posición. Para obtener un único carácter (char) que luego puedas comparar con una posición de una cadena (charAt), puedes hacer la siguiente lectura de teclado: teclado.nextLine().charAt(0);
solicitamos la segunda posición;
comprobamos si lo introducido por el usuario es correcto (esos valores coinciden con los contenidos de las posiciones del PIN solicitadas).
Una vez finalizada la entrada de posiciones (bien porque se hayan introducido valores válidos bien porque se hayan consumidos los tres intentos), se procederá a:
Si la entrada fue válida (los dos componentes del PIN introducidos han sido correctos), se procederá a crear una nueva cadena (String) con el PIN "enmascarado" teniendo en cuenta que en esta ocasión tendrás que "desenmascarar" las dos posiciones que se han introducido. Debes hacerlo nuevamente mediante un bucle for que vaya acumulando en el String caracteres del tipo asterisco ('*') o numérico, según toque. Tras eso se indicará que el PIN es correcto y que se procede al entrar en el sistema;
Si la entrada no fue válida (se consumieron los tres intentos sin conseguirlo), entonces simplemente se mostrará por pantalla un mensaje del tipo "Ha introducido tres veces un PIN incorrecto. Sistema bloqueado".
Os agradecería la más mínima ayuda. Porque llevo una semana dándome cabezazos con el poco material que nos dan.
Éste es el proyecto base que debemos cumplir:
package tarea02;
import java.util.Scanner;
import libtarea2.Utilidades;
/**
* Ejercicio 5. Validación de PIN.
* @author Indicar nombre de alumno/a
*/
public class Ejercicio05 {
public static void main(String[] args) {
//----------------------------------------------
// Declaración de variables
//----------------------------------------------
// Variables de entrada
// Variables de salida
// Variables auxiliares
String pin;
// Clase Scanner para petición de datos de entrada
Scanner teclado = new Scanner(System.in);
//----------------------------------------------
// Entrada de datos + Procesamiento
//----------------------------------------------
System.out.println("VALIDACIÓN DE PIN");
System.out.println("-----------------");
// 1. Creamos el PIN de seis dígitos
pin = Utilidades.generaPin();
System.out.println ("Creando un número de identificación personal de seis dígitos: " + pin);
// 2. Generamos aleatoriamente dos posiciones aleatorias y diferentes entre la 1 y la 6
// 2.1. Generamos primer número
// 2.2. Generamos segundo número garantizando que va a ser diferente al primero
// 2.3. Si el primer número es superior al segundo, los intercambiamos
// 3. Creamos el String con el PIN "enmascarado"
// 4. Mostramos el PIN enmascarado por pantalla e indicamos las posiciones que se deben introducir
// 5. Solicitamos esas posiciones al usuario y se lleva a cabo la comprobación (tres intentos como máximo)
// 5.1. Solicitamos primera posición aleatoria del PIN
// 5.2. Solicitamos segunda posición aleatoria del PIN
// 5.3. Comprobación de lo introducido frente al PIN
//----------------------------------------------
// Salida de Resultados
//----------------------------------------------
System.out.println();
System.out.println("RESULTADO");
System.out.println("---------");
// 6. Mostramos un resultado
// 6.1. Si el PIN es válido: Creamos el String con el PIN "enmascarado" desenmascarando la dos posiciones solicitadas e indicando el éxito
// 6.2. Si el PIN no es válido: Se indica que no se ha logrado introducir un PIN correcto y que el sistema se bloqueará
}
}
Valora esta pregunta


0