qq_39599516 2018-07-12 11:39 采纳率: 100%
浏览 1206
已采纳

一个多线程的题目,题主太笨了想不出来,题目应该不难

某自动售票机有几个买票的操作平台,机里有20张票,一张卖5元,现在里面没现金,
只有票,售票机只能放入10元跟5元。张三用10元来买一张票,售票机找不出零钱, 需要等待,此时李四用五元来买一张票,售票机就可以找钱了。
这样的一个程序怎么写呢?

  • 写回答

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);
    
    
      }
     }
    }
    

    ref: https://blog.csdn.net/c_4818/article/details/6690383

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 shape_predictor_68_face_landmarks.dat
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制