1.题目:现有两个相距X千米的车站,车站内有两种车型,Iveco和Yutong,车站内有Y个乘客想去另一个车站,Iveco每辆车可以乘坐12人,Yutong每辆可以乘坐47人
车站考虑成本,在有车的情况下,一定先发送Yutong客车,后发送Iveco客车,同时车站每半个小时发一次车,再有车的情况下,两种车都发。Iveco每小时走90千米,Yutong每小时走60千米。
问将所有人运载到对面车站需要多长事件(时间比例1:600)
思路:1.首先要抽象对象出来
车站是对象,该对象中,要有Iveco车辆的目前在站的数目,要有Yutong目前在站的数目,同时另一方如果到站了,应该将该车加入到本站中,乘客数
Iveco是一个类:有属性是载人量,速度,位置,可能还要有一个属性,是确定目前从A站到B站,还是从B站到A站。
Yutong也是一个类,和Ievco基本一致
路是一个类,场景类,车,车站,距离的计算等等,均是场景类中完成
2.创建车站类,车的类,创建车站的时候,发现需要一个List来包含所有的车,所以 需要创建两个List,而两个List的泛型应该都不一样,所以创建两个车类
Station必须要有构造方法,因为出现Station的时候,我们必须和知道这里面有多少个乘客
public class Iveco extends Thread{
public static final int CAPCITY =12;
public static final int SPEED =90;
public int position = 0;
public boolean faceTo =false;
@Override
public void run() {
while(position<270){
position = position+Iveco.SPEED/6;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class Yutong extends Thread{
public static final int CAPCITY = 47;
public static final int SPEED = 60;
public int position = 0;
public boolean faceTo = false;
@Override
public void run() {
while(position<270){
position = position+Yutong.SPEED/6;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
import java.util.ArrayList;
import java.util.List;
public class Road extends Thread {
public Stations xa;
public Stations hz;
public static List<Iveco> ivecos = new ArrayList<>();
public static List<Yutong> yutong = new ArrayList<>();
public Road() {
// 初始化西安车站的状态
List<Iveco> xaIveco = new ArrayList<>();
for (int i = 0; i < 50; i++) {
xaIveco.add(new Iveco());
}
List<Yutong> xaYutongs = new ArrayList<>();
for (int i = 0; i < 3; i++) {
xaYutongs.add(new Yutong());
}
xa = new Stations(400, xaIveco, xaYutongs);
xa.flag = true;
// 初始化汉中车站的状态
List<Iveco> hzIveco = new ArrayList<>();
for (int i = 0; i < 50; i++) {
hzIveco.add(new Iveco());
}
List<Yutong> hzYutongs = new ArrayList<>();
for (int i = 0; i < 3; i++) {
hzYutongs.add(new Yutong());
}
hz = new Stations(345, hzIveco, hzYutongs);
hz.flag = false;
}
@Override
public void run() {
xa.start();
hz.start();
while (true) {
synchronized (Stations.class) {
System.out.println("西安站目前有游客" + xa.person);
System.out.println("汉中站目前有游客" + hz.person);
// System.out.println("当前路上的大巴"+yutong.size());
// System.out.println("当前路上的依维柯"+ivecos.size());
// 遍历当前路上的所有依维柯
for (int i = 0; i < ivecos.size(); i++) {
// 如果依维柯的历程已经到270了
if (ivecos.get(i).position >= 270) {
// 判断依维柯是准备进那个站
if (ivecos.get(i).faceTo) {
// 进了西安站
Iveco iveco = ivecos.remove(i);
iveco.position = 0;
xa.ivecos.add(iveco);
} else {
// 进了汉中站
Iveco iveco = ivecos.remove(i);
iveco.position = 0;
hz.ivecos.add(iveco);
}
}
}
for (int i = 0; i < yutong.size(); i++) {
// 如果大巴的历程已经到270了
if (yutong.get(i).position >= 270) {
// 判断大巴是准备进那个站
if (yutong.get(i).faceTo) {
// 进了西安站
Yutong yuTong = yutong.remove(i);
yuTong.position = 0;
xa.yutong.add(yuTong);
} else {
// 进了汉中站
Yutong yuTong = yutong.remove(i);
yuTong.position = 0;
;
hz.yutong.add(yuTong);
}
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
import java.util.ArrayList;
import java.util.List;
public class Stations extends Thread{
public List<Iveco> ivecos = new ArrayList<>();
public List<Yutong> yutong = new ArrayList<>();
public int person=0;
public boolean flag=false;
public Stations(int person,List<Iveco> ivecos,List<Yutong> yutong) {
this.person=person;
this.ivecos=ivecos;
this.yutong=yutong;
}
public Yutong facheYutong(boolean flag){
if(yutong.size()>0){
if(person>0){
person=person-Yutong.CAPCITY;
yutong.get(0).faceTo=flag;
return yutong.remove(0);
}
}
return null;
}
public Iveco facheIveco(boolean flag){
if(ivecos.size()>0){
if(person>0){
person=person-Iveco.CAPCITY;
ivecos.get(0).faceTo=flag;
return ivecos.remove(0);
}
}
return null;
}
@Override
public void run() {
while(true){
Yutong yt=this.facheYutong(!flag);
if(null!=yt){
Road.yutong.add(yt);
yt.run();
}
Iveco i =this.facheIveco(!flag);
if(null!=i){
Road.ivecos.add(i);
i.run();
}
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class TestMain {
public static void main(String[] args) {
Road road = new Road();
road.start();
}
}