Practice Every Day_3
来源:互联网 发布:淘宝卖家怎么开通客服 编辑:程序博客网 时间:2024/06/05 00:11
今天写的还是关于线程的代码,模拟乘客排队买票的情形。看了书上的两个人买票的例子,我写了课后题中三个人买票的情况。
题目是:售货员只有三张5元的钱,每张票卖5元。张先生拿20元买票并且排在最前面,李先生拿10元买票,排在第二,赵先生拿5元买票,排在最后面。
以下为代码:
import java.awt.*;
import java.awt.event.*;
public class TicketOnSale {
public static void main(String[] args)
{
new SaleTicket("模拟售货员买票");
}
}
class SaleTicket extends Frame implements Runnable,ActionListener
{
Button b=new Button("开始卖票");
static TextArea text=new TextArea();
Thread zhang=new Thread(this);
Thread li=new Thread(this);
Thread zhao=new Thread(this);
SalesClerk clerk=new SalesClerk();
SaleTicket(String s)
{
add(text,BorderLayout.CENTER);
add(b,BorderLayout.NORTH);
b.setSize(5,10);
b.addActionListener(this);
setBounds(100,100,300,300);
setVisible(true);
b.setBackground(Color.pink);
text.setBackground(Color.white);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
public void actionPerformed(ActionEvent e)
{
try
{
zhang.start();
li.start();
zhao.start();
}
catch(Exception exp){}
}
public void run()
{
if(Thread.currentThread()==zhang)
{
clerk.rule(20);
text.append("\n"+"于是王买到票了。");
}
else if(Thread.currentThread()==li)
{
clerk.rule(10);
text.append("\n"+"于是李买到票了。");
}
else if(Thread.currentThread()==zhao)
{
clerk.rule(5);
text.append("\n"+"于是赵买到票了。");
}
}
}
class SalesClerk
{
int fivecount=3,tencount=0,twentycount=0;
String s=null;
public synchronized void rule(int money)
{
if(money==5)
{
fivecount+=fivecount;
s="您给的钱正好,给您入场券。";
SaleTicket.text.append("\n"+s);
}
else if(money==10)
{
while(fivecount<1)
{
try{wait();}
catch(InterruptedException e){}
}
fivecount-=1;
tencount+=1;
s="您给我10元,找给您5元,给您入场券。";
SaleTicket.text.append("\n"+s);
}
else if(money==20)
{
while(tencount<1||fivecount<1)
{
try{wait();}
catch(InterruptedException e){}
}
tencount-=1;
fivecount-=1;
twentycount+=1;
s="您给我20,找给您15,给您入场券。";
SaleTicket.text.append("\n"+s);
}
notifyAll();
}
}
注意append(String s)与setText(String s)的不同:
append(String s)是将给定文本追加到文本区的当前文本,setText(String s)是将此文本组件显示的文本设置为指定文本。
效果图如下:
由于窗口是可变动的,所以看上去的size和代码中设置的不同。- Practice Every Day_3
- Practice Every Day_2
- Practice Every Day_4
- Practice Every Day_5
- Practice Every Day_8
- Practice Every Day_13
- DAY_3
- Practice Every Day_9(更新索引)
- Practice Every Day_6 (Lucene 小练习)
- Practice Every Day_16(添加索引)
- Practice Every Day_17(Map集合小练习)
- Practice Every Day_7(Lucene3.5小练习)
- Practice Every Day_11(用HtmlParser解析Html文件)
- Practice Every Day_12(精确搜索和模糊搜索)
- Robin Hu的专栏Let's practice improving every day
- Day_3.(1)
- Day_3.(2)
- Practice Every Day_14(多字段搜索和多索引搜索)
- 记4月22日 小米招聘会 笔试
- Linux网络编程必看书籍推荐
- poj 题目分类
- 在敏捷项目中实施自动化测试之我见
- 还是POJ 题目分类,我在想做这个分类的是不是把题目都看完了。。。。英语啊!!
- Practice Every Day_3
- 第七篇 Linux进程技术概述
- 软件人才应具备的五种素质
- Mahalanobis Description
- C语言经典著作导读
- 飘荡软件
- MySQL编译参数优化
- 编译原理之文法二
- 黑马程序——高新部分(黑马我来了之十一)