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+".");
我遇到的问题是访问创建的帐户。
帐户已创建且字符串已运行,但我不确定如何访问该帐户
我想添加一个方法,在该方法中,您可以调用帐户的余额,但不确定如何执行此操作。
如果有任何帮助,我们将不胜感激。您没有展示您的
帐户
类的太多内容(这很好——有一个是好的,但最好有一个完全可编译的代码片段),因此我的回答将附带一些假设:
余额
和用户名
变量从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;
}
...
}