两种车往两个车站运人的java问题

1.题目:现有两个相距X千米的车站,车站内有两种车型,IvecoYutong,车站内有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();

}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值