java - 使对象同时运行
问题描述
我有 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 }
解决方案
而不是编写整个程序,我想指出与您的问题相关的最大问题。
您实际上只创建了一个 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 -> ...)
推荐阅读
- android - Fragment$Companion 无法在 BottomNavigationView 侦听器上强制转换为 androidx.fragment.app.Fragment
- php - laravel morphable 获取源码
- android - 触发 AppBar 回到其在 CoordinatorLayout 内的正常位置
- c - Unix中的fork函数
- iis - ASP.NET Core 3 - 有没有办法将模块部分添加到生成的 Web 配置文件
- javascript - 如何在 MVC 模式中创建模型类的实例 - SapUI5
- php - 如何修复内存耗尽的postgresql
- ios - RxSwift 不同库崩溃`NSInternalInconsistencyException`
- python - Python:如何将要处理的对象成员(可能嵌套更深)传递给函数?
- javascript - JQuery Calculator:无法让运算符工作