排队买票问题

排队买票问题,第1张

排队买票问题

排队买票

编写一个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);
            }
        }
    }
    

    自己写的,还不成熟,欢迎指点。。。。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/3974741.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-10-21
下一篇 2022-10-21

发表评论

登录后才能评论

评论列表(0条)

保存