Java - 访问在不同的' if / else if'中创建的对象。声明?

时间:2018-06-08 04:12:24

标签: java eclipse if-statement while-loop constructor

我目前正在开发一个项目(一个非常简单的临时书店),我有两个类(一个用于管理用户帐户,另一个用作驱动程序类),其中一个菜单呈现给用户通过驱动程序类的主要方法。根据项目规范,此菜单由 while 循环表示,其中用户键入与多个菜单选项之一对应的单个字符。在 while 循环中有一系列 if / else if else 语句,其中每个语句都包含其中一个菜单选项的代码。这些菜单选项如下:

Main Menu:

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

我认为, while 循环的目的是在用户完成各种子菜单后继续循环回主菜单,仅在用户输入为&#34时结束; 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 语句中创建了构造函数,但不知道如何在其他 if / else if 阻止,所以我想知道是否有办法让我:

  1. 获取'将资金加入帐户' 子菜单的 if 语句,以识别" user&#34 ; '创建帐户' 子菜单中的构造函数,以便我在此处包含的代码可以编译,或者:
  2. 在main方法的开头初始化" user" 构造函数,然后将其参数参数更改/更新为 scanner 稍后。
  3. 我在上面列表中的第二个思维过程是在 while循环之前声明/初始化构造函数将允许每个 if / else if else 阻止看到它,而似乎只有'创建帐户' 块现在可以看到它(我猜测这是因为构造函数已创建这里并且只是这个特定的 if 语句的本地。

    如果我使用的任何术语错误或不准确,并且我的任何代码混淆/不切实际,我会提前道歉。我只是一个初学者,所以如果你们能指出我为我做的学习经历所犯的任何错误,我会很感激。

    谢谢!

2 个答案:

答案 0 :(得分:1)

您需要在let data = { foo: "bar" } request.post({ uri: 'www.domain.com/upload', body: data, json:true }, function (err: any, res: any, body: any) { //handle callback }); 循环和while

之前声明变量

e.g。

if-else

答案 1 :(得分:0)

您可以在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是否为空。