List<Truck> tomove = sortAscending(trucks, t -> t.fitness).subList(population人数, trucks.size() - 1);
时间: 2024-05-15 18:12:31 浏览: 63
这段代码是将一个Truck类型的List按照fitness属性从小到大排序,然后取出排序后的第population人数个到最后一个(即population人数之后的所有Truck),并放入一个新的List中。
具体解释如下:
1. `sortAscending(trucks, t -> t.fitness)`:使用`sortAscending`方法对`trucks`进行排序,排序的依据是每个Truck对象的`fitness`属性,从小到大排列。这个方法的具体实现可能类似于:
```
public static <T> List<T> sortAscending(List<T> list, Function<T, Comparable> keyExtractor) {
list.sort(Comparator.comparing(keyExtractor));
return list;
}
```
2. `subList(population人数, trucks.size() - 1)`:使用`subList`方法从排序后的List中截取一部分,从第`population人数`个元素开始一直截取到最后一个元素。这个新的List中包含的元素就是那些fitness值最高的Truck对象。
3. `List<Truck> tomove = ...`:将截取得到的Truck对象集合赋值给一个新的List变量`tomove`。
相关问题
// 统计走完的卡车数量 traceln(count(main.trucks, s -> s.inState(Truck.stEnd))); // 如果卡车全部完成任务,重新计算 if (count(main.trucks, s -> s.inState(Truck.stEnd)) == main.trucks.size()) { main.nextGeneration(); }
你的问题属于技术类问题,可以回答。这段代码通过 traceln 函数统计 main.trucks 中已经完成任务的卡车数量,如果所有卡车都完成任务,则会调用 main.nextGeneration 函数进行下一代的计算。
帮我看看我的代码有什么问题:#include<iostream> #include<string> using namespace std; class Vehicle { protected: string no; //编号 public: Vehicle(string no) { this->no = no; } virtual void display() = 0; //应收费用 }; class Car :public Vehicle { public: int num; float weight; Car(string no, int num, float weight) :Vehicle(no) { this->num = num; this->weight = weight; } void display() { cout << no << " " << num * 8 + weight + 2 << endl; } }; class Bus:public Vehicle { public: int num; Bus(string no, int num) :Vehicle(no) { this->num = num; } void display() { cout << no << " " << num*30 << endl; } }; class Truck :public Vehicle { public: float weight; Truck(string no, int weight) :Vehicle(no) { this->weight = weight; } void display() { cout << no << " " << weight* 5 << endl; } }; int main() { int t; cin >> t; int type; string no; while (t--) { if (type == 1){ Car car; Vehicle* pv = &car; } else if (type == 2) { Truck truck; Vehicle* pv = &truck; } else if (type == 3) { Bus bus; Vehicle* pv = &bus; } pv.display(); } return 0; }
你的代码存在几个问题:
1. 在主函数里,你没有读取每个车辆的类型和编号。你需要添加以下代码:
```
cin >> type >> no;
```
在读取完车辆类型和编号后,你需要判断车辆类型,然后创建相应的对象,并将指针指向该对象。
2. 在创建车辆对象时,你需要传入相应的参数。例如,对于Car,你需要传入num和weight。
3. 在创建车辆对象时,你需要使用new运算符。例如,对于Car,你需要使用以下代码:
```
Vehicle* pv = new Car(no, num, weight);
```
4. 在主函数里,你需要调用display函数来输出每个车辆的应收费用。你需要将指针解引用后再调用display函数。例如,对于Car,你需要使用以下代码:
```
pv->display();
```
修改后的代码如下所示:
阅读全文