1. 程式人生 > >關於 阿裏巴巴筆試題 :投資保險的 建議

關於 阿裏巴巴筆試題 :投資保險的 建議

bre pub start n) break 推斷 str catch except

/**
 * 
 * @author xy1131975903
 * 1)應該將保險類設計為資源共享,即設計一個同步方法用於控制用戶的投資;推斷是否投資成功;
 * 2)應將投資者設計為多線程類,即實現Runnable接口,能夠競爭投資。
 * 3)須要在投資者中體現,競爭投資資源(保險類)的屬性,即能夠設計保險類為其成員變量。
 *   這樣就能夠體現多個用戶競爭投資資源的實現。

* */ class Insurance{ private double yield=0.18; private int totalAmount=200000; private int minInvestment=1000; public int abAmount=0; private int count=0; public Insurance(){}; public synchronized boolean buySuccess(int funds,String userID){ boolean isSuccess=false; count++; System.out.println("投資: "+funds+" ; 眼下剩余: "+(totalAmount-abAmount)); if(funds%minInvestment==0 && funds<=totalAmount-abAmount){ abAmount+=funds; System.out.println("第"+count+"個用戶 ("+userID+") success!"); isSuccess=true; }else{ System.out.println("第"+count+"個用戶 ("+userID+") failed!"); } System.out.println(); return isSuccess; } } class User implements Runnable{ private String userID=null; private int funds=0; private Insurance mInsurance=null; public boolean isSuccess=false; public boolean isRun=false; public User(String userID,int funds,Insurance mInsurance){ this.userID=userID; this.mInsurance=mInsurance; this.funds=funds; } @Override public void run() { // TODO 自己主動生成的方法存根 isSuccess=mInsurance.buySuccess(funds,userID); isRun=true; } public String getUserId(){return userID;} public int getFunds(){return funds;} } class TestInsuracne{ public void test(){ Insurance mInsurance=new Insurance(); List<User>mList=new ArrayList<User>(); User mUser[]=new User[20]; Thread mt[]=new Thread[20]; int i=0,sleeptime=0; for(i=0;i<mUser.length;i++){ String str="userID_"+(i+1); mUser[i]=new User(str, (i+1)*1000, mInsurance); mt[i]=new Thread(mUser[i]); sleeptime=(int)Math.random()*5000; start(sleeptime, mt[i]); } //boolean exitFlag=false; while(true){ for(i=0;i<mUser.length;i++){ if(!mUser[i].isRun)break; } if(i==mUser.length)break; } System.out.println("具體數據例如以下:"); for(i=0;i<mUser.length;i++){ if(mUser[i].isSuccess){ mList.add(mUser[i]); } } User tempUser=null; for(i=0;i<mList.size();i++){ tempUser=(User)mList.get(i); System.out.println(tempUser.getUserId()+": "+tempUser.getFunds()); } } public void start(int sleepTime,Thread mt){ try { Thread.sleep(sleepTime); mt.start(); } catch (InterruptedException e) { // TODO 自己主動生成的 catch 塊 e.printStackTrace(); } } }


關於 阿裏巴巴筆試題 :投資保險的 建議