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

来源:互联网 发布:淘宝助手客服电话 编辑:程序博客网 时间:2024/05/17 09:40

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 Ivecoextends Thread{


publicstatic finalint CAPCITY =12;

publicstatic finalint SPEED =90;

publicint position = 0;

publicboolean faceTo =false;

@Override

public void run() {

while(position<270){

position =position+Iveco.SPEED/6;

try {

Thread.sleep(1000);

} catch (InterruptedExceptione) {

e.printStackTrace();

}

}

}

}

public class Yutongextends Thread{


publicstatic finalint CAPCITY = 47;


publicstatic finalint SPEED = 60;


publicint position = 0;


publicboolean faceTo =false;

@Override

public void run() {

while(position<270){

position =position+Yutong.SPEED/6;

try {

Thread.sleep(1000);

} catch (InterruptedExceptione) {

e.printStackTrace();

}

}

}

}

import java.util.ArrayList;

import java.util.List;


public class Road extends Thread {


public Stationsxa;


public Stationshz;


public static List<Iveco> ivecos = new ArrayList<>();


public static List<Yutong> yutong = new ArrayList<>();


public Road() {


// 初始化西安车站的状态

List<Iveco> xaIveco =new ArrayList<>();


for (inti = 0; i < 50;i++) {

xaIveco.add(new Iveco());

}

List<Yutong> xaYutongs =new ArrayList<>();

for (inti = 0; i < 3;i++) {

xaYutongs.add(new Yutong());

}

xa = new Stations(400, xaIveco, xaYutongs);

xa.flag =true;


// 初始化汉中车站的状态

List<Iveco> hzIveco =new ArrayList<>();


for (inti = 0; i < 50;i++) {

hzIveco.add(new Iveco());

}

List<Yutong> hzYutongs =new ArrayList<>();

for (inti = 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 (inti = 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 (inti = 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 (InterruptedExceptione) {

e.printStackTrace();

}

}

}


}


}

import java.util.ArrayList;

import java.util.List;


public class Stationsextends Thread{


public List<Iveco>ivecos = new ArrayList<>();

public List<Yutong>yutong = new ArrayList<>();

publicint person=0;

publicboolean flag=false;

public Stations(intperson,List<Iveco> ivecos,List<Yutong> yutong) {

this.person=person;

this.ivecos=ivecos;

this.yutong=yutong;

}

public Yutong facheYutong(booleanflag){

if(yutong.size()>0){

if(person>0){

person=person-Yutong.CAPCITY;

yutong.get(0).faceTo=flag;

return yutong.remove(0);

}

}

returnnull;

}

public Iveco facheIveco(booleanflag){

if(ivecos.size()>0){

if(person>0){

person=person-Iveco.CAPCITY;

ivecos.get(0).faceTo=flag;

return ivecos.remove(0);

}

}

returnnull;

}

@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 (InterruptedExceptione) {

e.printStackTrace();

}

}

}

}

public class TestMain {


public static void main(String[] args) {

Road road =new Road();

road.start();

}

}


原创粉丝点击