Java 银行系统应用中账户余额的存取

Java 银行系统应用中账户余额的存取,java,Java,我目前正在尝试创建一个简单的银行程序,用户可以在其中创建帐户、存款和取款。问题是我在创建帐户时遇到了麻烦 以下是我的主要观点: Account account = new Account(); account.createAccount(1000, "Bob"); 这是我的Account.java类: public void createAccount(int bal, String name){ int balance = bal; String username = n

我目前正在尝试创建一个简单的银行程序,用户可以在其中创建帐户、存款和取款。问题是我在创建帐户时遇到了麻烦

以下是我的主要观点:

Account account = new Account();
account.createAccount(1000, "Bob");
这是我的Account.java类:

public void createAccount(int bal, String name){

    int balance = bal;

    String username = name;

    System.out.println("An account has been set up for "+name+", with a balance of $"+bal+".");
我遇到的问题是访问创建的帐户。 帐户已创建且字符串已运行,但我不确定如何访问该帐户

我想添加一个方法,在该方法中,您可以调用帐户的余额,但不确定如何执行此操作。
如果有任何帮助,我们将不胜感激。

您没有展示您的
帐户
类的太多内容(这很好——有一个是好的,但最好有一个完全可编译的代码片段),因此我的回答将附带一些假设:

  • 您需要能够检索和设置余额
  • 您当前没有此问题的解决方案
  • 我假设您当前的类如下所示(为了简洁起见,删除了空格):

    正如@ScaryWombat在他的评论中指出的,您需要将
    余额
    用户名
    变量从
    createAccount
    方法中移出,并作为字段放入类中。然后在
    createAccount
    方法中设置这些字段:

    public class Account {
        private int balance = bal;
        private String username = name;
        public void createAccount(int bal, String name) {
            this.balance = bal;
            this.username = name;
            System.out.println("An account has been set up for "+name+", with a balance of $"+bal+".");
        }
    }
    
    现在,
    Account
    实例拥有一个余额和一个名称,当您调用
    createAccount
    时,该名称将被覆盖

    然而,我们仍然有一个问题。每次调用
    createAccount
    ,数据都会被覆盖。例如,在此代码中,Bob的帐户将被遗忘,Alice的帐户将覆盖数据:

    Account account = new Account();
    account.createAccount(1000, "Bob");
    account.createAccount(2000, "Alice");
    
    这就是构造器的用武之地。我们将把逻辑移到
    Account
    构造函数中,而不是
    createAccount
    方法:

    public class Account {
        private int balance = bal;
        private String username = name;
        public Account(int bal, String name) {
            this.balance = bal;
            this.username = name;
            System.out.println("An account has been set up for "+name+", with a balance of $"+bal+".");
        }
    }
    
    这样,创建帐户的唯一方法是在调用
    newaccount()
    时指定起始详细信息:

    然而,我们仍然没有解决你问题的核心:如何获得平衡?以下操作将导致错误:

    bobsAccount.balance = 2000;
    
    这是因为
    balance
    字段是私有的(应该是私有的)。我们需要的是向
    Account
    类添加访问器方法:

    public class Account{
    ...
        public void setBalance(int newBalance) {
            balance = newBalance;
            System.out.println(name+"'s account balance is now $"+bal+".");
        }
        public int getBalance() {
            return balance;
        }
    ...
    }
    
    您可能会问“为什么要这么麻烦?”,我们可以添加检查(例如,不允许余额低于零)、添加日志以审核余额访问权限,或者甚至没有
    setBalance
    getBalance
    ,但只能
    从(帐户其他帐户)
    转移到(帐户其他帐户)(确保从不增加资金,而只在系统中转移资金)


    另外,正如其他评论所指出的,
    int
    对于货币金额来说从来都不好。你需要的是一个
    Currency
    类型,它使用其他东西,例如
    BigDecimal
    ,来存储实际值。

    变量应该是
    字段
    而不是本地变量。除非你是用日元交易,否则我猜是b根据@ScaryWombat,alance应该不是
    int
    ,使用BigDecimal表示美元货币,因为不建议使用double/fields表示货币。这是一个相当不错的答案,但从安全角度来看,一般建议不要使用字符串串联,而使用string.format。理想情况下,也可以使用logging-over-System.out例如:System.out.println(String.format(“已为%s设置帐户,余额为$%d.”,名称,余额));
    bobsAccount.balance = 2000;
    
    public class Account{
    ...
        public void setBalance(int newBalance) {
            balance = newBalance;
            System.out.println(name+"'s account balance is now $"+bal+".");
        }
        public int getBalance() {
            return balance;
        }
    ...
    }