首页 > 解决方案 > 使对象同时运行

问题描述

我有 5 个巴士对象和 15 个巴士站对象。该程序应该运行使得所有 5 个公共汽车对象在公共汽车站之间同时运行。

在此处输入图像描述

在输出中,第一个总线对象运行了预期的时间并在第二个总线运行之前停止,并且一直持续到 5 总线。但是,我需要所有公共汽车在公共汽车站之间同时运行并同时停止。

巴士班

public class Bus {
int capacity;
int bus_id=0; 
busStop position;
double time=10.0;



public Bus(){
  this.capacity=50;    
  this.bus_id=bus_id;
} 


public void spawn_bus(int bus_total,int position){
    for(int i=1; i<=bus_total; i++){
        bus_id=i;
        System.out.println("Bus with ID:"+i+" created");
       // setBusPosition(i,Bus_simulation.getPoissonRandom(position));
        busMovement(i,Bus_simulation.getPoissonRandom(position));
    }
 }
public void setBusPosition(int bus_id, int stop_id){
    System.out.println("Bus : "+bus_id+ " at Stop :"+stop_id);
}        
public void busMovement(int bus_id, int stop_id){
    double t=0.0;
   while(bus_id>0 && t<=time){
        t++;
       stop_id ++;
       if(stop_id>15){
           int stop_id_m= (stop_id % 15);
       System.out.println("Bus :" +bus_id + " now at "+stop_id_m +" at Time "+ t);
       }else{
       System.out.println("Bus :" +bus_id + " now at "+stop_id +" at Time "+ t);   
       }
     }
   } 
  }

主班

public class Bus_simulation {


public static void main(String[] args) {
  int bus_number=5;  
  int total_bus_stops=15; 
  // bus obects
  Bus bus = new Bus();
 // bus stop onnjects
 busStop stops = new busStop();
 getPoissonRandom(5);
 stops.create_busStop(total_bus_stops);
 bus.spawn_bus(bus_number,5);


}

public static int getPoissonRandom(double mean){
Random r = new Random();
double L = Math.exp(-mean);
int k = 0;
double p = 1.0;
do {
    p = p * r.nextDouble();
    k++;
} while (p > L);
return k - 1;
}

  // Generate Bus }

标签: java

解决方案


而不是编写整个程序,我想指出与您的问题相关的最大问题。

您实际上只创建了一个 Bus

Bus bus = new Bus();

然后您只需更改公交车号,然后再次移动它。您可能想创建一个

List<Bus> buses = new ArrayList<>(); 

反而。然后将 5 条总线放入列表中并与它们循环交互。

buses.add(new Bus());
buses.add(new Bus());
...
buses.forEach(bus -> ...)  // this is for Java8+

spawn_bus 方法没有按照方法名称的含义进行操作。

老式的 Java 可能是...

for (Bus bus : buses) {
    ...
}

如果您想以并行方式(线程)与它们交互,请利用 Java 流......

buses.parallelStream().forEach(bus -> ...) 

推荐阅读