在下面的程序中,如何使银行账户的转账次数限定为有限次数?因为此程序会一直运行。除非人为终止。代码如下:/**
* 本例中用2种方法创建并启动线程
* @author mk
*
*/
public class UnsynchBank {
public static void main(String[] args){
Bank b=new Bank(NACCOUNTS,INITIAL_BALANCE);
for(int i=0;i<NACCOUNTS;i++){
//方法1: TransferRunnable r=new TransferRunnable(b,i,INITIAL_BALANCE);
// Thread t=new Thread(r);
ChildThread t=new ChildThread(b,i,INITIAL_BALANCE);//方法2
t.start();
}
}
private static final int NACCOUNTS=100;
private static final double INITIAL_BALANCE=1000;
}
public class ChildThread extends Thread{
public ChildThread(Bank b,int from,double max){
bank=b;
fromAccount=from;
maxAmount=max;
}
public void run(){
try{
while(true){
int toAccount=(int)(bank.size()*Math.random());
double amount=maxAmount*Math.random();
bank.transfer(fromAccount, toAccount, amount);
Thread.sleep((int)(DELAY*Math.random()));
}
}catch(InterruptedException e){
}
}
private Bank bank;
private double maxAmount;
private int fromAccount;
private int DELAY=10;}
public class Bank {
public Bank(int n,double initialBalance){
accounts=new double[n];
for(int i=0;i<accounts.length;i++){
accounts[i]=initialBalance;
}
}
public void transfer(int from,int to,double amount){
if(accounts[from]<amount)return;
accounts[from]-=amount;
accounts[to]+=amount;
System.out.println("Total Balance: "+getTotalBalance());
}
public double getTotalBalance(){
double sum=0;
for(double s:accounts){
sum+=s;
}
return sum;
}
public int size(){
return accounts.length;
}
private final double[] accounts;}
* 本例中用2种方法创建并启动线程
* @author mk
*
*/
public class UnsynchBank {
public static void main(String[] args){
Bank b=new Bank(NACCOUNTS,INITIAL_BALANCE);
for(int i=0;i<NACCOUNTS;i++){
//方法1: TransferRunnable r=new TransferRunnable(b,i,INITIAL_BALANCE);
// Thread t=new Thread(r);
ChildThread t=new ChildThread(b,i,INITIAL_BALANCE);//方法2
t.start();
}
}
private static final int NACCOUNTS=100;
private static final double INITIAL_BALANCE=1000;
}
public class ChildThread extends Thread{
public ChildThread(Bank b,int from,double max){
bank=b;
fromAccount=from;
maxAmount=max;
}
public void run(){
try{
while(true){
int toAccount=(int)(bank.size()*Math.random());
double amount=maxAmount*Math.random();
bank.transfer(fromAccount, toAccount, amount);
Thread.sleep((int)(DELAY*Math.random()));
}
}catch(InterruptedException e){
}
}
private Bank bank;
private double maxAmount;
private int fromAccount;
private int DELAY=10;}
public class Bank {
public Bank(int n,double initialBalance){
accounts=new double[n];
for(int i=0;i<accounts.length;i++){
accounts[i]=initialBalance;
}
}
public void transfer(int from,int to,double amount){
if(accounts[from]<amount)return;
accounts[from]-=amount;
accounts[to]+=amount;
System.out.println("Total Balance: "+getTotalBalance());
}
public double getTotalBalance(){
double sum=0;
for(double s:accounts){
sum+=s;
}
return sum;
}
public int size(){
return accounts.length;
}
private final double[] accounts;}
解决方案 »
- 1989年12月29日 怎么转换成 1989.95年 的?????
- HashMap在调试时的原型是Hashmap<K,V>,K和V是什么意思?
- 找不到符号???
- 运行一个java程序后报的提示~
- 在html页面中,如何用程序判断本机是否连接到因特网?
- 求一个对中文支持好的jspSmartUpload包,谢谢大家!
- 最近想模仿着做个"扫雷",可是遇到了些个问题....
- package问题
- 三两问,up有分。
- VBScript中FormatNumber(expression ,0,-1)是什么功能?用java怎么替换?
- 关于swing和SWT哪个插件运用的更广泛,哪个是主流?
- 没用数组之类的,运行时弹出【空指针问题】,求解。。。。。
for(int i=0;i<NACCOUNTS;i++){
将 NACCOUNTS 改为次数
public class Bank {
public Bank(int n,double initialBalance){
accounts=new double[n];
transferCount = new int[n];
for(int i=0;i<accounts.length;i++){
accounts[i]=initialBalance;
}
}
public void transfer(int from,int to,double amount){
if(accounts[from]<amount)return;
accounts[from]-=amount;
accounts[to]+=amount;
System.out.println("Total Balance: "+getTotalBalance());
transferCount[from]++; //转账次数累加
}
public double getTotalBalance(){
double sum=0;
for(double s:accounts){
sum+=s;
}
return sum;
}
public int size(){
return accounts.length;
} public int getTransgerCount(int accountId) {
return transferCount[accountId];
}
private final double[] accounts;
private final int[] transferCount;
public static final int MAX_TRANSFER_COUNT = 50;}//线程中判断转账次数
public class ChildThread extends Thread{
public ChildThread(Bank b,int from,double max){
bank=b;
fromAccount=from;
maxAmount=max;
}
public void run(){
try{
while(true){
//判断转账次数,大于转账次数则推出循环
if (fromAccount.getTransferCount() > Bank.MAX_TRANSFER_COUNT) {break;}
int toAccount=(int)(bank.size()*Math.random());
double amount=maxAmount*Math.random();
bank.transfer(fromAccount, toAccount, amount);
Thread.sleep((int)(DELAY*Math.random()));
}
}catch(InterruptedException e){
}
}
private Bank bank;
private double maxAmount;
private int fromAccount;
private int DELAY=10;}
while(true){
//判断转账次数,大于转账次数则推出循环
if (b.getTransferCount(fromAccount) > Bank.MAX_TRANSFER_COUNT) {break;}
final int[] a = {1,2,3};
a = new int[]{4,5,6}; //这是不可以的,数组a本身不能改变
a[0]=4; //这是可以的,数组元素可以改变