Java - Доступ к объекту, созданному в другом операторе if / else if? - PullRequest
0 голосов
/ 08 июня 2018

В настоящее время я работаю над проектом (очень простой самодельный книжный магазин), в котором у меня есть два класса (один для управления учетной записью пользователя и один функционирующий в качестве класса драйвера), в котором пользователю предлагается меню черезОсновной метод класса водителя.Это меню, согласно спецификациям проекта, представлено циклом , в то время как , в котором пользователь вводит один символ, соответствующий одному из нескольких пунктов меню.В этом цикле , в то время как цикл представляет собой последовательность , если / , в противном случае, если , с каждым из этих операторов содержит код для одного из параметров меню.Эти пункты меню следующие:

Main Menu:

N - Create account
L - Load money into your account balance
O - Order a book
S - Print an account summary
X - Quit

Цель цикла , в то время как , я полагаю, состоит в том, чтобы продолжать возвращаться к главному меню после того, как пользователь перебирает различные подпрограммы.меню, оканчивающиеся только тогда, когда пользовательский ввод имеет значение «X».

Когда пользовательский ввод имеет значение «N» и меню «Создать учетную запись» запущено, выполняется следующий код:

if(menuInput == 'N') {
            // Scanner sc has already been declared at top of main method

            System.out.println("Enter your desired username:");
            in_userName = sc.next();
            // String in_userName has already been declared at top of main method

            System.out.println("Enter a starting balance:");
            in_initBal = sc.nextDouble();
            // double in_initBal has already been declared at top of main method

            UserAccount user = new UserAccount(in_userName,in_initBal);
            accountCheck = true;

         /* accountCheck is a boolean that makes sure an account has been
            created; it has already been declared/initialized to 'false' 
            prior to the while loop
         */

}

Единственная другая опция меню в классе драйверов, которую я запрограммировал до сих пор, это 'L - Загрузка денег на баланс вашего счета' .Код для этой опции меню выглядит следующим образом:

else if(menuInput == 'L') {
            if(accountCheck == false) {
                System.out.println("You must create an account first. Enter N                                                                      
                                    to create one.");
            }
            else {
                System.out.println("Enter the amount to add:");
                in_amountToAdd = sc.nextDouble(); 
                // double in_amountToAdd has already been declared at top of main method   

                user.addToBalance(in_amountToAdd);     /* Method in the User Account class
                                                          that takes a double parameter and
                                                          adds it to the existing balance.
                                                       */
                System.out.println(user.getBalance());
            }

Проблема в том, что user.addToBalance (in_amountToAdd) и System.out.println (user.getBalance ()) строки не компилируются, потому что «пользователь не может быть разрешен» .Я создал конструктор в операторе if , соответствующем параметру 'Create account' , но не знаю, как реализовать его в других if / иначе, если блокируется, поэтому мне было интересно, есть ли способ для меня:

  1. Получить заявление if для 'Загрузить деньги на счетПодменю ' для распознавания конструктора "user" из подменю ' Create account ', так что код, который я включил здесь, будет компилироваться, или:
  2. Инициализируйте конструктор user ' в начале основного метода, а затем измените / обновите его параметры аргумента до входных значений из сканера позже.

Мой мыслительный процесс для номера два в приведенном выше списке заключается в том, что объявление / инициализация конструктора перед циклом while будет разрешать каждый , если / иначе, если заблокировать, чтобы увидеть его, тогда как кажется, только блок 'Создать аккаунт' можетувидеть это прямо сейчас (я предполагаю, что это потому, что конструктор был создан здесь и является локальным только для этого конкретного if оператора).

Я заранее извиняюсь, если какой-либо изТерминология, которую я использовал, неверна или неточна, и если какой-либо из моего кода сбивает с толку / нецелесообразен.Я только новичок, поэтому я был бы признателен, если бы вы, ребята, указали на любые ошибки, которые я сделал, чтобы служить для меня опытом обучения.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Вы можете объявить UserAccount user перед циклом While.

UserAccount user = null;

// while not "Exit"
while (menuInput != 'X') {

    if (menuInput == 'N') {
        user = new UserAccount(in_userName,in_initBal);
    }
    else if(menuInput == 'L') {

        // check if UserAccount is created
        if (user != null) {
            user.addToBalance(in_amountToAdd);
        }

    }

    .....
}

С этим вы можете исключить логическую переменную accountCheck, так как аналогичная проверка может быть сделана, чтобы проверить, является ли userнуль.

0 голосов
/ 08 июня 2018

Вам необходимо объявить переменную перед циклом while и if-else

например

UserAccount user = null;

while (...) {
    if (...) {
      user = new UserAccount(in_userName,in_initBal);
    }
    else {
       user.addToBalance(in_amountToAdd); 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...