初级
package com.lzy.syn;
public class dBookTrain {
public static void main(String[] args) {
Train t=new Train("k1046",20); //火车班次,以及火车总票数
new Thread(new Passenger(t,5),"小明").start(); //小明选了5张票班次k1046
new Thread(new Passenger(t,15),"小刚").start();//小红选了15张票班次k1046
}
}
//乘客
class Passenger implements Runnable{
Train train;//火车
int seats;//票数
public Passenger(Train train, int seats) {
this.train = train;
this.seats = seats;
}
@Override
public void run() {
synchronized(train) {
boolean flag=train.choose(seats);
if(flag) {//订票成功
System.out.println("欢迎乘坐"+train.name +"列车,"+Thread.currentThread().getName()+"定了"+seats+"张票");
}
else {//订票失败
System.out.println("购票失败,请重试或选择其他列车");
}
}
}
}
//火车
class Train {
String name;//火车班次
int available;//座位
public Train(String name, int available) {
this.name = name;
this.available = available;
}
public boolean choose(int seats) {
if(seats>available) {//所选票数大于火车总票数,出票失败
return false;
}
//出票成功
available-=seats;//更新火车车票数
return true;
}
}
运行结果:
欢迎乘坐k1046列车,小明定了5张票
欢迎乘坐k1046列车,小刚定了15张票
在这只能显示乘客定了几张票,而不能清楚自己的位置在哪,下面代码稍微增进一下
增进代码(加入List)
package com.lzy.syn;
import java.util.ArrayList;
import java.util.List;
public class dBookTrain02 {
public static void main(String[] args) {
List<Integer> t=new ArrayList<>();
for(int i=1;i<=10;i++) {
t.add(i);
}//添加火车空余位置
GoTrain g=new GoTrain("k1046",t);
List<Integer> s=new ArrayList<>();//乘客lzy选的位置
s.add(3);
s.add(5);
List<Integer>h=new ArrayList<>();//乘客lll选的位置
h.add(1);
h.add(9);
h.add(8);
h.add(6);
new Thread(new GoPassenger(g,s),"lzy").start();
new Thread(new GoPassenger(g,h),"lll").start();
}
}
class GoPassenger implements Runnable{
GoTrain train;
List<Integer> seats;//乘客所选位置
public GoPassenger(GoTrain train, List<Integer> seats) {
this.train = train;
this.seats = seats;
}
@Override
public void run() {
synchronized(train) {
boolean flag=train.choose(seats);//判断是否购票成功
if(flag) {
System.out.println("欢迎乘坐"+train.name +"列车,"+Thread.currentThread().getName()
+"定了"+seats+"位置的票,"+"共"+seats.size()+"张票");
}
else {
System.out.println("购票失败,请重试或选择其他列车");
}
}
}
}
class GoTrain {
String name;//那一班火车
List<Integer> available;//空余座位位置
public GoTrain(String name, List<Integer> available) {
this.name = name;
this.available = available;
}
public boolean choose(List<Integer> seats) {
System.out.println("欢迎乘坐本班列车,本班列车可选位置有:"+available);
List<Integer> copyavailable=new ArrayList<>();
copyavailable.addAll(available);//复制火车空余位置
copyavailable.removeAll(seats);//火车座位减去乘客选的位置
if(available.size()-copyavailable.size()!=seats.size()) {
//判断火车空余位置总数-(copyavailable-减去乘客选的位置)是否等于乘客选的位置
return false;
}
//购买成功
available=copyavailable;//更新火车空余位置
return true;
}
}
运行结果
欢迎乘坐本班列车,本班列车可选位置有:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
欢迎乘坐k1046列车,lzy定了[3, 5]位置的票,共2张票
欢迎乘坐本班列车,本班列车可选位置有:[1, 2, 4, 6, 7, 8, 9, 10]
欢迎乘坐k1046列车,lll定了[1, 9, 8, 6]位置的票,共4张票