某自动售票机有几个买票的操作平台,机里有20张票,一张卖5元,现在里面没现金,
只有票,售票机只能放入10元跟5元。张三用10元来买一张票,售票机找不出零钱, 需要等待,此时李四用五元来买一张票,售票机就可以找钱了。
这样的一个程序怎么写呢?
一个多线程的题目,题主太笨了想不出来,题目应该不难
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- threenewbee 2018-07-12 13:51关注
package com.test; public class tickettread implements Runnable { private static int ticketNum = 20; private static int money5 ;//5元 private static int money10;//机器上10元一张的数量 private static int buyMoney;// 一次给的钱 private Thread ticketSale; public tickettread(String threadname, int buymoney) { ticketSale = new Thread(this, threadname); System.out.println("线程,名称为:" + threadname); buyMoney = buymoney; ticketSale.start(); } @Override public void run() { try { price(buyMoney); } catch (Exception e) { System.out.println(ticketSale.getName()+ ":..........Interrupted....."); e.printStackTrace(); } } public synchronized void price(int cash) { if(cash==10){ while(money5<1) { System.out.println(money10+":"+money5); System.out.println("没零钱"); try {this.wait();} catch (InterruptedException e) {e.printStackTrace();} } money10+=1; money5-=1; System.out.println("谢谢您的等待,有零钱了,找你5快"+money10+":"+money5); }else{ money5+=1; ticketNum-=1; System.out.println("ticketNum"+ticketNum+money5); } this.notify(); } /*public synchronized void sale() { try{ if (ticketNum < buyNum) { if (ticketNum == 0) { System.out.println("卖光了"); } else { System.out.println("只剩下" + ticketNum + "张票了"); } this.wait(); } else {// 有票卖 System.out.println("有票买"+ticketNum); //应收得钱为: int cash=buyNum*5; if(buyMoney==cash){ if(buyNum==1){ money5+=1; } else{ money10+=buyNum; } money+=cash; ticketNum-=buyNum; System.out.println("不用找钱,钱总数为:"+money+",余票未"+ticketNum); //唤醒等待的。。。。。。。。 this.notify(); } else{//(buyMoney!=cash) if((buyMoney>cash)) { if(money<buyMoney-cash){ System.out.println("零钱不够,请等候,"); this.wait(); }else{ System.out.println("感谢您的耐心等待,现在有零钱了"); System.out.println("操作成功,现金"+buyMoney+"元,买票"+buyNum+"张"); //补下找钱的方法 //唤醒等待的。。。。。。。。 this.notify(); } }else{//buyMoney<currentmoney,现金少于要支付的钱 this.wait(); System.out.println("现金少于要支付的钱"); } } } }catch(Exception e){e.printStackTrace();} //this.notifyAll(); } */ public static class Client { public static void main(String[] args) { tickettread t1 = new tickettread("张三", 10); tickettread t2 = new tickettread("李四", 5); } } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 shape_predictor_68_face_landmarks.dat
- ¥15 slam rangenet++配置
- ¥15 有没有研究水声通信方面的帮我改俩matlab代码
- ¥15 对于相关问题的求解与代码
- ¥15 ubuntu子系统密码忘记
- ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
- ¥15 保护模式-系统加载-段寄存器
- ¥15 电脑桌面设定一个区域禁止鼠标操作
- ¥15 求NPF226060磁芯的详细资料
- ¥15 使用R语言marginaleffects包进行边际效应图绘制