Проблемы при проверке кода - PullRequest
0 голосов
/ 11 мая 2018
import java.util.*;

public class AccountClient {

public static void main(String[] args)  {
    @SuppressWarnings("resource")
    Scanner input = new Scanner(System.in);
    boolean infiniteLoop = true;
    boolean invalidInput;
    int id = 0;

    // Create array of different accounts
    Account[] accountArray = new Account[1000000];
    //Initialize each account array with its own unique id and a starting account balance of $100
    for (int i = 0; i < accountArray.length; i++) {
        accountArray[i] = new Account("name", i, 100);
    }
    do {    
        try {       
            //inner loop to detect invalid Input
            do {
                invalidInput = false;
                System.out.print("Enter an id: ");

                if (!(input.hasNextInt())) {
                    System.out.println("Invalid input. Please enter a numeric id between 0 and 999999, no letters or symbols allowed. Try again.");
                    invalidInput = true;
                    input.nextLine();
                }


                else {
                    id = input.nextInt(); 
                    accountArray[id].setNumberOfTimesOpened(accountArray[id].getNumberOfTimesOpened() + 1);
                    input.nextLine();
                    if (accountArray[id].firstTimeAccount()) {
                        System.out.print("Please enter a name to register to this account: ");
                        String name = input.nextLine();
                        accountArray[id].setName(name);
                    }
                }

            } while (invalidInput);
            boolean exit;
            do {
                exit = false;
                boolean notAnOption;
                int choice;
                do {
                    notAnOption = false;
                    System.out.print("\nMain Menu\n1: check balance\n2: withdraw\n3: deposit\n4: view transaction history\n5: exit\nEnter a choice: ");
                    choice = input.nextInt();
                    if (choice < 1 || choice > 5) {
                        System.out.println("Sorry, " + choice + " is not an option. Please try again and enter a number between 1 and 5 (inclusive).");
                        notAnOption = true;
                    }
                } while(notAnOption);
                switch (choice) {
                case 1: System.out.printf("The balance for your account is $%.2f\n", accountArray[id].getBalance());
                    break;
                case 2: {
                    boolean withdrawFlag;
                    do {
                        System.out.print("Enter the amount you would like to withdraw: ");
                        double withdrawAmount = input.nextDouble();
                        input.nextLine();
                        if (withdrawAmount > accountArray[id].getBalance()) {     
                            System.out.printf("Sorry, you only have an account balance of $%.2f. Please try again and enter a number at or below this amount.\n", accountArray[id].getBalance());
                            withdrawFlag = true;
                        }
                        else {
                            accountArray[id].withdraw(withdrawAmount);
                            System.out.printf("Thank you. You have successfully withdrawn $%.2f from your account.\n", withdrawAmount);
                            withdrawFlag = false;
                        }
                    } while (withdrawFlag);
                }

                    break;
                case 3: {
                    System.out.print("Enter the amount you would like to deposit: ");
                    double depositAmount = input.nextDouble();
                    input.nextLine();
                    accountArray[id].deposit(depositAmount);
                    System.out.printf("Thank you. You have successfully deposited $%.2f into your account.\n", depositAmount); 
                    }
                    break;
                case 4: {
                    accountArray[id].accountSummary();
                    }
                    break;
                case 5: {
                    System.out.println("returning to the login screen...\n");
                    exit = true;
                    }
                    break;
                }

            } while (exit == false);

        }

        catch (ArrayIndexOutOfBoundsException ex1) {
            System.out.println("Invalid input. Please enter an id between 0 and 999999 (inclusive).");  
            input.nextLine();
        }

        catch (InputMismatchException ex2) {
            System.out.println("Sorry, invalid input. Please enter an id between 0 and 999999 (inclusive) with no letters or symbols.");
            input.nextLine();
        }

    } while (infiniteLoop);

  } 

}

Привет всем, у меня есть программа, которая имитирует банкомат. Он использует класс учетной записи, который я создал, чтобы создать учетную запись для пользователя после ввода идентификатора в диапазоне от 0 до 999999. Затем они могут выполнять различные задачи, такие как просмотр баланса, снятие средств, пополнение счета и т. Д. У меня проблема, хотя и с ошибкой проверка программы. Он компилируется без ошибок и при первом прохождении цикла работает отлично. Однако, если они нажимают выход и вводят другой неверный идентификатор, он отображает недопустимое входное сообщение дважды. Я скопировал консоль того, что происходит ниже. Может кто-нибудь, пожалуйста, объясните мне, почему он это делает и как это исправить. Кроме того, я новичок в Java, так что если кто-нибудь может сказать мне лучший способ проверки ошибок, это будет высоко ценится. На данный момент, если они вводят значение типа int, а оно не находится в диапазоне от 0 до 999999, у меня должна быть отдельная ArrayIndexOutofBoundsException, чтобы перехватить ошибку. Это кажется неэффективным. Есть ли способ, которым я могу проверить ошибки, если они ввели числовое значение, и если они это сделали, еще раз проверить, если они ввели ввод от 0 до 999999? Спасибо

Введите идентификатор: f

Неверный ввод. Пожалуйста, введите числовой идентификатор от 0 до 999999, буквы и символы не допускаются. Попробуйте еще раз.

Введите идентификатор: 5

Пожалуйста, введите имя для регистрации в этом аккаунте: Bob

Главное меню

1: проверка баланса

2: снять

3: депозит

4: просмотреть историю транзакций

5: выход

Введите выбор: 5

возвращаясь к экрану входа в систему ...

Введите идентификатор: f

Неверный ввод. Пожалуйста, введите числовой идентификатор от 0 до 999999, буквы и символы не допускаются. Попробуйте еще раз.

Введите идентификатор: Неверный ввод. Пожалуйста, введите числовой идентификатор от 0 до 999999, буквы и символы не допускаются. Попробуйте еще раз.

Введите идентификатор:

1 Ответ

0 голосов
/ 12 мая 2018

Я получил нулевую помощь от кого-либо, но после нескольких часов разочарования я понял, что это потому, что мне не удалось поставить input.nextLine () после того, как я попросил пользователя сделать выбор. Это привело к тому, что сканер не был очищен, и оператор был напечатан дважды, прежде чем он был очищен во внутреннем цикле, который у меня был в начале. Как только я добавил input.nextLine (), он работал нормально.

...