【问题标题】:How do I store multiple values (with different types) in an array and print them out?如何将多个值(具有不同类型)存储在一个数组中并打印出来?
【发布时间】:2015-04-06 11:21:38
【问题描述】:

我的程序要求用户创建一个银行帐户。目前它只能创建一个帐户并打印出来。我想扩展我的程序,以便它可以通过一次又一次地选择菜单选项来创建多个帐户,最后打印所有帐户详细信息。

package bankapp_assignment;

import java.util.Scanner;

public class BankApp_Assignment {

    public static void main(String[] args) {
        BankAccount[] accounts = new BankAccount[10];

        Scanner sc = new Scanner(System.in);

        int userChoose;
        String name = null;
        int accNum = 0;
        double initiateAmount = 0;
        double newAmm = 0;

        double depOrWith = 0;
        System.out.println("WELCOME TO OUR BANK!\n\n"
                + "...................\n"
                + "...................\n\n"
                + "Choose your optiin:\n"
                + "1. Create new account\n"
                + "2. View all the accounts property\n"
                + "3. Quit\n\n");

        System.out.println("*************\n"
                + "************");
        while (true) {
            userChoose = sc.nextInt();
            sc.nextLine();
            if (userChoose == 1) {
                /*the user must be able to create multiple accounts, let's say 10 accounts for instance
                 To open another new account the user should choose the menu option "1" again and continue...
                 */
                System.out.println("Enter your full name:");
                name = sc.nextLine();

                System.out.println("Choose an account number:");

                accNum = sc.nextInt();

                System.out.println("Enter an initiating amount:");

                initiateAmount = sc.nextDouble();
                System.out.println("\n-----------\n"
                        + "------------");
            } else if (userChoose == 2) {//view all the accounts property (including account number and initial balance)

            } else if (userChoose == 3) {
                System.exit(0);

            }
        }

    }

}

银行账户:

package bankapp_assignment;

public class BankAccount {
    public void createAcc(){

    }
}

在纳曼回答后编辑:

    public static void main(String[] args) {
        BankAccount[] accounts = new BankAccount[10];

        Scanner sc = new Scanner(System.in);

        int userChoose;
        String name = null;
        int accNum = 0;
        double initiateAmount = 0;
        double newAmm = 0;

        double depOrWith = 0;
        System.out.println("WELCOME TO OUR BANK!\n\n"
                + "...................\n"
                + "...................\n\n"
                + "Choose your optiin:\n"
                + "1. Create new account\n"
                + "2. View all the accounts property\n"
                + "3. Quit\n\n");

        System.out.println("*************\n"
                + "************");
        while (true) {
            userChoose = sc.nextInt();
            sc.nextLine();
            if (userChoose == 1) {
                /*the user must be able to create multiple accounts, let's say 10 accounts for instance
                 To open another new account the user should choose the menu option "1" again and continue...
                 */
                System.out.println("Enter your full name:");
                name = sc.nextLine();

                System.out.println("Choose an account number:");

                accNum = sc.nextInt();

                System.out.println("Enter an initiating amount:");

                initiateAmount = sc.nextDouble();
                System.out.println("\n-----------\n"
                        + "------------");

accounts[numOfAcc]=bankAcc;
                numOfAcc++;

            } else if (userChoose == 2) {//view all the accounts property (including account number and initial balance)

   for(BankAccount bankAccount: accounts){

                  System.out.println("Your name: " + name);
                 System.out.println("Your account number: " + accNum);
                 System.out.println("Your current balance: " + initiateAmount);
                 System.out.println("\n-----------\n"
                 + "------------");  

                  }



            } else if (userChoose == 3) {
                System.exit(0);

            }
        }

    }

}

【问题讨论】:

    标签: java arrays object if-statement java.util.scanner


    【解决方案1】:

    如果你想继续使用数组,那么你可以先初始化静态变量:

    static int number = 0;
    

    如下改变你的块:

     if (userChoose == 1) {
        BankAccount ac = new BankAccount();
        //set account properties;
        accounts[number] = ac;
        number++;
     }
    

    你可以像下面这样检索数组:

    for(BankAccount bankAccount: accounts){
       //bankAccount.getProperty();
    }
    

    你的代码应该是这样的

    BankAccount bankAcc = null;
       if (userChoose == 1) {
           bankAcc = new BankAccount(); 
                    /*the user must be able to create multiple accounts, let's say 10 accounts for instance
                     To open another new account the user should choose the menu option "1" again and continue...
                     */
                    System.out.println("Enter your full name:");
                    name = sc.nextLine();
                    bankAcc.setName(name);//setter method of your bankAccount bean
                    System.out.println("Choose an account number:");
    
                    accNum = sc.nextInt();
                    bankAcc.setAccountNum(accNum);
                    System.out.println("Enter an initiating amount:");
    
                    initiateAmount = sc.nextDouble();
                    bankAcc.setInitialAmount(initialAmount);
                    System.out.println("\n-----------\n"
                            + "------------");
    
    accounts[numOfAcc]=bankAcc;
                    numOfAcc++;
    
                }
    

    检索如下:

    else if (userChoose == 2) {//view all the accounts property (including account number and initial balance)
    
       for(BankAccount bankAccount: accounts){
    
                      System.out.println("Your name: " + bankAccount.getName());
                     System.out.println("Your account number: " + bankAccount.getAccountNum());
                     System.out.println("Your current balance: " + bankAccount.getInitialAmount());
                     System.out.println("\n-----------\n"
                     + "------------");  
    
                      }
    

    【讨论】:

    • 嗨,Naman,我实际上想继续我创建的数组,这也是你所做的。但是如果我想打印出 accounts 属性(通过选择选项 2)。我认为静态 int number = 0;它不能全部打印出来(或者,我可能错了吗?)。还有,如果我想打印一个特定的帐户详细信息(通过引用用户的帐号),我想在将来修改我的程序。有了你给出的答案,它会正常工作吗?
    • 我编辑了我的答案。您可以像这样检索所有银行帐户。如果你想获取特定的账户,那么你可以使用equals方法来获取特定的账户。
    • 亲爱的 Naman,很抱歉再次打扰您。我已经编辑了我的帖子,我根据您的建议进行了更改。但它不会将所有帐户属性保存在数组中。它只存储最后创建的帐户,此外它会打印所有内容 10 次。我想我在某个地方有点误会,希望你不会很难发现。
    • 你能运行这段代码吗?由于您尚未设置 bankacc 的任何属性
    【解决方案2】:

    带有工作答案

    的完整代码
    package tester;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;
    
    public class BankApp {
    
        static class BankAccount {
            private String name;
            private int accNum;
            private double initiateAmount;
    
            public BankAccount() {
                this.name = null;
                this.accNum = 0;
                this.initiateAmount = 0;
            }
    
            public void setAccNum(int accNum) {
                this.accNum = accNum;
            }
    
            public void setInitiateAmount(double initiateAmount) {
                this.initiateAmount = initiateAmount;
            }
    
            public void setName(String name) {
                this.name = name;
            }
    
            @Override
            public String toString() {
                return name + "\t" + accNum + "\t" + initiateAmount;
            }
        }
    
        public static void main(String[] args) {
            List<BankAccount> bankAccounts = new ArrayList<BankAccount>();
            Scanner sc = new Scanner(System.in);
            while(true){
            System.out.println("WELCOME TO OUR BANK!\n\n"
                    + "Choose your option:\n"
                    + "1. Create new account\n"
                    + "2. View all the accounts property\n"
                    + "3. Quit\n");
    
                int option = sc.nextInt();
                sc.nextLine();
                switch(option){
                    case 1:
                        BankAccount account = new BankAccount();
                        System.out.println("Enter your full name:");
                        account.setName(sc.nextLine());
                        System.out.println("Choose an account number:");
                        account.setAccNum(sc.nextInt());                    
                        System.out.println("Enter an initiating amount:");
                        account.setInitiateAmount(sc.nextDouble());
                        bankAccounts.add(account);
                        break;
                    case 2:
                        System.out.println("Name\tAcc No\tAmount");
                        for (BankAccount bankAccount : bankAccounts) {
                            System.out.println(bankAccount);
                        }
                        System.out.println("\n\n");
                        break;
                    case 3:
                        return;
                }
            }
        }
    }
    

    如果您想将BankAccount 放在单独的文件中,请执行以下操作。

    文件BankAccount.java

    public class BankAccount {
    ...
    ...
    }
    

    【讨论】:

    • Faraj Farook,我喜欢你解决它的方式,但我从没想过一个班级里面有一个班级。如果不在我的主类中创建一个静态类,怎么能做到?
    • 获取课程并将其存储在名为 BankAccount.java 的单独文件中。去掉static关键字,在那个地方加上public
    • Faraj Farook,谢谢它现在可以正常工作了
    【解决方案3】:

    1) 创建一个对象类:例如

    class BankAccount{
        private String userName;
        private String userSurname;
        private String birthDay;
        private int accountNumber;
        private int ibanNo;
        private int balance;
        public BankAccount(String userName, String userSurname, String birthDay, int accountNumber, int ibanNo, int balance) {
            super();
            this.userName = userName;
            this.userSurname = userSurname;
            this.birthDay = birthDay;
            this.accountNumber = accountNumber;
            this.ibanNo = ibanNo;
            this.balance = balance;
        }
        public String getUserName() {
            return userName;
        }
        public void setUserName(String userName) {
            this.userName = userName;
        }
        public String getUserSurname() {
            return userSurname;
        }
        public void setUserSurname(String userSurname) {
            this.userSurname = userSurname;
        }
        public String getBirthDay() {
            return birthDay;
        }
        public void setBirthDay(String birthDay) {
            this.birthDay = birthDay;
        }
        public int getAccountNumber() {
            return accountNumber;
        }
        public void setAccountNumber(int accountNumber) {
            this.accountNumber = accountNumber;
        }
        public int getIbanNo() {
            return ibanNo;
        }
        public void setIbanNo(int ibanNo) {
            this.ibanNo = ibanNo;
        }
        public int getBalance() {
            return balance;
        }
        public void setBalance(int balance) {
            this.balance = balance;
        }
    
    }
    

    2) 在您的主类中使用此对象创建一个全局列表;

    List<BankAccount> accounts = new ArrayList<BankAccount>();
    

    3) 现在您可以将新帐户添加到您的列表中;

    accounts.add(new BankAccount(String userName, String userSurname, String birthDay, int accountNumber, int ibanNo, int balance));
    

    4) 现在您可以使用帐户列表添加/获取/删除帐户。

    【讨论】:

    • Mucahit,我如何打印所有帐户?
    【解决方案4】:

    创建银行帐户详细信息的对象并简单地添加到 ArrayList 使用 java.util 包中的 ArrayList 数据类型 创建一个包含银行帐户详细信息的类,只需将其导入该类并编写以下代码

    List <BankAccount> accounts = new <BankAccount> ArrayList();
    BankAccount object = new BankAccount();
    //Set field here like
    
    System.out.println("Enter your full name:");
                    name = sc.nextLine();
    
                    System.out.println("Choose an account number:");
    
                    accNum = sc.nextInt();
    
                    System.out.println("Enter an initiating amount:");
    
                    initiateAmount = sc.nextDouble();
    

    简单的使用之后

    accounts.add(object);
    

    在这种情况下存储通用数据类型或对象是完美的, 还可以在 if -then- else 块上使用 switch 案例,使其更具可读性和方便性

    还可以使用增强的 for 循环来查看帐户

    for(BankAccount account:accounts){
    System.out.println("ALL DETAILS FROM OBJECT");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-01
      • 2012-08-05
      相关资源
      最近更新 更多