作者:吴耀存
撰写时间:2019年07月04日
文献类型:专题类型
思想:简单结合现实电影院购票的实际情况,例如:固定的位置,多个顾客同时买票,售出的票不能在出售(为什么说简单,是因为现实电影院购票的实际情况比我列举的还要复杂,所以我只列举了这些情况)
实现步骤:
1. 定义影院、顾客类(顾客可以是多个,所以要继承Thread类,或者实现Runnable接口)
2. 定义影院的属性(可用的位置),定义顾客的属性(可用的位置(影院的属性),预定的位置)
3. 实例多个顾客对象,启动线程模拟购票(每个顾客对象需要传入影院的实例对象(影院的实例对象内存地址要一致))
4. 根据顾客订购的位置去可用位置中找,如果符合则订票成功,如果票已经出售的情况下则告诉顾客该票已经出售
代码部分:
public class lianxi {
public static void main(String[] args) {
List<Integer> list=new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
Cinema cinema=new Cinema(list);
//顾客乙购买的票
List<Integer> list1=new ArrayList<Integer>();
list1.add(1);
list1.add(2);
list1.add(3);
Customer customer=new Customer(list1,cinema);
customer.setName("甲");
customer.start();
//顾客甲购买的票
List<Integer> list2=new ArrayList<Integer>();
list2.add(4);
list2.add(2);
list2.add(3);
Customer customer2=new Customer(list2,cinema);
customer2.setName("乙");
customer2.start();
}
}
//影院
class Cinema {
private List<Integer> availablePosition;//可用位置
public List<Integer> getAvailablePosition() {
return availablePosition;
}
public void setAvailablePosition(List<Integer> availablePosition) {
this.availablePosition = availablePosition;
}
public Cinema(List<Integer> availablePosition) {
super();
this.availablePosition = availablePosition;
}
}
//顾客
class Customer extends Thread{
private List<Integer> ticket;
private Cinema cinema;
//
@Override
public void run() {
purchaseTicket();
}
public boolean purchaseTicket(){
synchronized (cinema) {
List<Integer> list=new ArrayList<Integer>();
//备份所有票,以免有票不符合的情况
list.addAll(cinema.getAvailablePosition());
//移除购买的票
list.removeAll(ticket);
if(cinema.getAvailablePosition().size()-list.size()==ticket.size()){
cinema.setAvailablePosition(list);
System.out.println(this.getName()+"先生出票成功");
System.out.print("票号为:");
for (int i = 0; i < ticket.size(); i++) {
if(ticket.size()-1==i){
System.out.println(ticket.get(i));
break;
}
System.out.print(ticket.get(i)+",");
}
return true;
}
System.out.println(this.getName()+"先生出票失败");
ticket.removeAll(cinema.getAvailablePosition());
StringBuilder str=new StringBuilder();
for (int i = 0; i < ticket.size(); i++) {
str.append(ticket.get(i)).append(",");
}
str.setCharAt(str.length()-1, ' ');
System.out.println(str.toString().trim()+"号票已经售出");
return false;
}
}
public Customer(List<Integer> ticket, Cinema cinema) {
super();
this.ticket = ticket;
this.cinema = cinema;
}
}
效果图:
![](http://imgsrc.baidu.com/forum/w%3D580/sign=a525087b20dda3cc0be4b82831e83905/3b16d4f5e0fe99255222f8b43aa85edf8cb171ec.jpg)
撰写时间:2019年07月04日
文献类型:专题类型
思想:简单结合现实电影院购票的实际情况,例如:固定的位置,多个顾客同时买票,售出的票不能在出售(为什么说简单,是因为现实电影院购票的实际情况比我列举的还要复杂,所以我只列举了这些情况)
实现步骤:
1. 定义影院、顾客类(顾客可以是多个,所以要继承Thread类,或者实现Runnable接口)
2. 定义影院的属性(可用的位置),定义顾客的属性(可用的位置(影院的属性),预定的位置)
3. 实例多个顾客对象,启动线程模拟购票(每个顾客对象需要传入影院的实例对象(影院的实例对象内存地址要一致))
4. 根据顾客订购的位置去可用位置中找,如果符合则订票成功,如果票已经出售的情况下则告诉顾客该票已经出售
代码部分:
public class lianxi {
public static void main(String[] args) {
List<Integer> list=new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
Cinema cinema=new Cinema(list);
//顾客乙购买的票
List<Integer> list1=new ArrayList<Integer>();
list1.add(1);
list1.add(2);
list1.add(3);
Customer customer=new Customer(list1,cinema);
customer.setName("甲");
customer.start();
//顾客甲购买的票
List<Integer> list2=new ArrayList<Integer>();
list2.add(4);
list2.add(2);
list2.add(3);
Customer customer2=new Customer(list2,cinema);
customer2.setName("乙");
customer2.start();
}
}
//影院
class Cinema {
private List<Integer> availablePosition;//可用位置
public List<Integer> getAvailablePosition() {
return availablePosition;
}
public void setAvailablePosition(List<Integer> availablePosition) {
this.availablePosition = availablePosition;
}
public Cinema(List<Integer> availablePosition) {
super();
this.availablePosition = availablePosition;
}
}
//顾客
class Customer extends Thread{
private List<Integer> ticket;
private Cinema cinema;
//
@Override
public void run() {
purchaseTicket();
}
public boolean purchaseTicket(){
synchronized (cinema) {
List<Integer> list=new ArrayList<Integer>();
//备份所有票,以免有票不符合的情况
list.addAll(cinema.getAvailablePosition());
//移除购买的票
list.removeAll(ticket);
if(cinema.getAvailablePosition().size()-list.size()==ticket.size()){
cinema.setAvailablePosition(list);
System.out.println(this.getName()+"先生出票成功");
System.out.print("票号为:");
for (int i = 0; i < ticket.size(); i++) {
if(ticket.size()-1==i){
System.out.println(ticket.get(i));
break;
}
System.out.print(ticket.get(i)+",");
}
return true;
}
System.out.println(this.getName()+"先生出票失败");
ticket.removeAll(cinema.getAvailablePosition());
StringBuilder str=new StringBuilder();
for (int i = 0; i < ticket.size(); i++) {
str.append(ticket.get(i)).append(",");
}
str.setCharAt(str.length()-1, ' ');
System.out.println(str.toString().trim()+"号票已经售出");
return false;
}
}
public Customer(List<Integer> ticket, Cinema cinema) {
super();
this.ticket = ticket;
this.cinema = cinema;
}
}
效果图:
![](http://imgsrc.baidu.com/forum/w%3D580/sign=a525087b20dda3cc0be4b82831e83905/3b16d4f5e0fe99255222f8b43aa85edf8cb171ec.jpg)