#java
#java
Вопрос:
Я создаю программу atm, которая принимает номер счета и PIN-код. Когда я пытаюсь ввести что-либо, кроме принятых учетных записей и пин-кодов, которые предопределены, предполагается, что он выдает сообщение об ошибке, и пользователь пытается снова. Единственная проблема заключается в том, что он выводит сообщение об ошибке, но переходит к следующему вводу вместо повторения предыдущего ввода. т.Е. Переходит от ввода номера счета к вводу PIN-кода. То же самое происходит и для pin-кода. Я действительно не знаю, что с этим делать. Заранее спасибо! Вот фрагмент моего кода:
import java.util.*;
import java.lang.*;
public class Menu {
Scanner input = new Scanner(System.in);
//Bank bank = new Bank();
boolean keepGoing = true;
public static void main(String[] args){
Menu menu = new Menu();
menu.startMenu();
}//end main
public void startMenu(){
int choice = 0;
int verify1 = 0;
int verify2 = 0;
int account = 0;
int pin = 0;
printGreet();
while(keepGoing){
System.out.print("Please enter Account number: ");
do{
try{
account = input.nextInt();
}//end try
catch(NumberFormatException e){
System.out.print("ERROR: That is not a valid account number. Please enter a valid account number (#####): ");
input.nextLine();//clear buffer
}//end catch
catch(InputMismatchException e){
System.out.print("Error: That is not a valid account number. Please enter a valid account number (#####): ");
input.nextLine();//clear buffer
}//end catch
if(account < 0 || account > 99999){
System.out.print("ERROR: That is not a valid account number. Please enter a valid account number (#####): ");
//input.nextLine();//clear buffer
}//end if
}while(!(account >= 0 amp;amp; account <= 99999));//end do/while
System.out.print("Please enter PIN number: ");
do{
try{
pin = input.nextInt();
}//end try
catch(NumberFormatException e){
System.out.print("ERROR: That is not a valid pin number. Please enter a valid pin number (#####): ");
input.nextLine();//clear buffer
}//end catch
catch(InputMismatchException e){
System.out.print("ERROR: That is not a valid pin number. Please enter a valid pin number (#####): ");
input.nextLine();//clear buffer
}//end catch
if(pin < 0 || pin > 99999){
System.out.print("ERROR: That is not a valid pin number. Please enter a valid pin number (#####): ");
//input.nextLine();//clear buffer
}//end if
}while(!(pin >= 0 amp;amp; pin <= 99999));//end do/while
verify1 = verifyAccount(account);
verify2 = verifyPin(pin);
if((verify1 == 1) amp;amp; (verify2 == 1)){
printAdminMenu();
choice = getAdminChoice();
adminChoices(choice);
}else if((verify1 == 2) amp;amp; (verify2 == 2)){
printUserMenu();
choice = getUserChoice();
userChoices(choice);
}else{
System.out.println("ERROR: YOU ARE NOT AN AUTHORIZED USER...GOODBYE");
System.exit(0);
}//end if/else
}//end while
}//end startMenu()
Комментарии:
1. Вы разрешаете учетную запись и pin-код, когда они есть
>= 0
, но изначально они равны нулю, а поскольку ноль — это значение, которое вы принимаете, оно переходит к следующему элементу. Инициализируйте их-1
, если ноль действительно является допустимым значением для PIN-кода и номера учетной записи.2. Кроме того, вам не нужно
import java.lang.*;
—java.lang
пакет импортируется по умолчанию во все программы Java.
Ответ №1:
Время только проверяет, является ли номер учетной записи недействительным. При возникновении ошибки синтаксического account
pin
анализа переменная / остается 0
неизменной, поэтому она не повторяется.
Я исправил / улучшил код для вас. Обратите внимание, что вы всегда должны отлаживать свой код, прежде чем задавать вопрос о StackOverflow.
public void startMenu() {
int account = 0;
int pin = 0;
printGreet();
while (keepGoing) {
System.out.print("Please enter Account number: ");
boolean invalid;
do {
invalid = false;
try {
account = input.nextInt();
// Cancel if the number is invalid
if (account < 0 || account > 99999) {
throw new NumberFormatException();
}
} catch (NumberFormatException | InputMismatchException e) {
System.out.print("ERROR: That is not a valid account number. Please enter a valid account number (#####): ");
input.nextLine();
// Mark the loop iteration as invalid
invalid = true;
}
} while (invalid);
System.out.print("Please enter PIN number: ");
do {
invalid = false;
try {
pin = input.nextInt();
// Cancel if the number is invalid
if (pin < 0 || pin > 99999) {
throw new NumberFormatException();
}
} catch (NumberFormatException | InputMismatchException e) {
System.out.print("ERROR: That is not a valid pin number. Please enter a valid pin number (#####): ");
input.nextLine();
invalid = true;
}
} while (invalid);
verify1 = verifyAccount(account);
verify2 = verifyPin(pin);
if ((verify1 == 1) amp;amp; (verify2 == 1)) {
printAdminMenu();
choice = getAdminChoice();
adminChoices(choice);
} else if ((verify1 == 2) amp;amp; (verify2 == 2)) {
printUserMenu();
choice = getUserChoice();
userChoices(choice);
} else {
System.out.println("ERROR: YOU ARE NOT AN AUTHORIZED USER...GOODBYE");
System.exit(0);
}
}
}