满意答案
eikey
2014.02.13
采纳率:50% 等级:12
已帮助:21596人
用我的,我的绝对比上面那个写得好。(至少用了线程同步synchronized)
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
public class Account {
private String name;
private double balance; // 余额
private int id;
private ArrayList transactions;
public Account(String name, int id, double balance) {
this.name = name;
this.balance = balance;
this.id = id;
this.transactions = new ArrayList();
}
//用同步方法,防止多线程操作导致帐户余额出错
public synchronized void withDraw(double money) throws Exception {
if (money > balance) {
throw new Exception("帐户余额不足!");
} else {
balance -= money;
transactions.add(new Transaction("Withdraw", money));
}
}
//用同步方法,防止多线程操作导致帐户余额出错
public synchronized void deposit(double money) {
balance += money;
transactions.add(new Transaction("Deposit", money));
}
//返回此帐户的所有信息,包括过往存取款纪录
public String checkAccount() {
String msg = "您好!" + name + " 先生,您的帐户余额为: " + balance + " RMB" + "\n"
+ "银行存取纪录:\n";
if (transactions.size() == 0)
return msg + "无";
else {
Iterator it = transactions.iterator();
while (it.hasNext())
msg += it.next().toString() + "\n";
return msg;
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Account account = new Account("你妹", 1, 0);
account.deposit(100000);//存10W
//取2次随机数的款项
for (int i = 0; i < 2; i++) {
double money;
money = Math.random() * 1000;
try {
account.withDraw(money);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//打印帐户所有纪录
System.out.println(account.checkAccount());
}
}
class Transaction {
private Date createdDate; //交易产生的日期
private String operation; //交易的操作
private double money; //交易钱款
public Transaction(String opertaion, double money) {
createdDate = new Date();
this.operation = opertaion;
this.money = money;
}
@Override
public String toString() {
return "[" + new SimpleDateFormat("yyyy-MM-dd").format(createdDate)
+ " " + operation + " " + money + " RMB]";
}
}
02分享举报