排队买票
编写一个Java程序,模拟5个人排队买票。售票员只有1张5元的钱,电影票5元钱一张。假设5个人的名字及排队顺序是赵、钱、孙、李、周。“赵”拿l张二十元的人民币买2张票,“钱”拿1张二十元的人民币买l张票,“孙”拿l张十元的人民币买l 张票,“李”拿l张十元的人民币买2张票,“周”拿l张五元的人民币买l张票。要求售票员按如下规则找赎:
- 二十元买2张票,找零:l张十元;不需找零:2张五元。
- 二十元买l张票,找零:l张十元1张五元;不需找零:3张五元。
- 十元买1张票,找零:l张五元。
- 自己练练手写的,可能不会那么好看,QAQ
- 源代码:
-
public class ticket { public static void main(String[] args) { account acct=new account(); ticketer t1=new ticketer(acct); t1.setName("赵"); t1.start(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } ticketer t2=new ticketer(acct); t2.setName("钱"); t2.start(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } ticketer t3=new ticketer(acct); t3.setName("孙"); t3.start(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } ticketer t4=new ticketer(acct); t4.setName("李"); t4.start(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } ticketer t5=new ticketer(acct); t5.setName("周"); t5.start(); } } class account{ private int five=1,ten=0,twenty=0; public synchronized void sellticket(int money,int bynum){ // System.out.println(Thread.currentThread().getName()+"的线程"); if(money==5){ notifyAll(); five++; System.out.println(Thread.currentThread().getName()+"拿着一张5元的买1张票"); }else if(money==10){ if(bynum==1){ if(five>=1){ notifyAll(); five--; ten++; System.out.println(Thread.currentThread().getName()+"拿着一张10元的买1张票"); } }else if(bynum==2){ notifyAll(); ten++; System.out.println(Thread.currentThread().getName()+"拿着一张10元的买2张票"); } }else { while (money==20){ if(bynum==1){ if(five>=1&&ten>=1){ ten--; five--; twenty++; System.out.println(Thread.currentThread().getName()+"拿着一张20元的买1张票"); Thread.currentThread().stop(); }else{ System.out.println("售货员请"+Thread.currentThread().getName()+"旁边一等"); try { wait(); System.out.println(Thread.currentThread().getName()+"结束等待"); } catch (InterruptedException e) { e.printStackTrace(); } } } if(bynum==2){ if(ten>=1){ ten--; twenty++; System.out.println(Thread.currentThread().getName()+"拿着一张20元的买2张票"); Thread.currentThread().stop(); }else{ System.out.println("售货员请"+Thread.currentThread().getName()+"旁边一等"); try { wait(); System.out.println(Thread.currentThread().getName()+"结束等待"); } catch (InterruptedException e) { e.printStackTrace(); } } } } } } } class ticketer extends Thread{ private account acct; public ticketer(account acct){ this.acct=acct; } @Override public void run() { if(getName().equals("赵")){ acct.sellticket(20,2); } if(getName().equals("钱")){ acct.sellticket(20,1); } if(getName().equals("孙")){ acct.sellticket(10,1); } if(getName().equals("李")){ acct.sellticket(10,2); } if(getName().equals("周")){ acct.sellticket(5,1); } } }
自己写的,还不成熟,欢迎指点。。。。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)