所以我有一系列客户。客户包含firstName,lastName和一系列汽车。
String Firstname
String Lastname
Cars car[]
汽车包含
String Make
String Model
String Colour
汽车数量因客户而异,因此一个客户可以拥有2辆汽车,另一个客户可以拥有4辆汽车。 在我的场景中,我有一个客户列表,我正在循环,我想创建他们的汽车数组。但我想以特定的方式做到这一点。所以说我有3个客户和7辆汽车,其中包含以下数据:
[Jim, Bob, [car1, car2]]
[John, Smith, [car3, car4, car5]]
[Jack, Jones, [car6, car7]]
汽车数据是:
Car1 – [Renault, Clio, Red]
Car2 – [Audi, A4, Green]
Car3 – [Seat, Leon, Yellow]
Car4 – [BMW, i8, Black]
Car5 – [Vauxhall, Astra, Silver]
Car6 – [Volkswagen, Golf, Grey]
Car7 – [Subaru, Impreza, Purple]
我想做的是首先遍历客户,然后循环遍历汽车并添加到数组carList。
ArrayList<Car> carsList = new ArrayList<Car>();
For (cust in customers)
{
var i = 0;
For (car in cust.cars)
{
carsList.add(car)
i++
}
}
但这里是我想要做一些不同的事情。在第一个客户我们有两辆车,这将把这两辆车添加到carsList阵列。第二个客户有3辆车,我希望这些客户的汽车从第一个客户覆盖car1和car2,然后添加car3。在最终客户上,我希望car6和car7从客户2覆盖car3和car4,但保留6号汽车。以下显示每个循环后的输出:
loop1:[car1,car2]
loop2:[car3,car4,car5]
loop3(最终结果):[car6,car7,car5]
我知道我可以使用int变量来跟踪数组的位置(我把它包含在代码中),我知道我可以使用arryList.set来覆盖某个位置的数据。我的问题是,我不希望抛出任何索引超出范围的异常。如何判断何时使用add添加到数组或设置为覆盖现有值?
希望这是有道理的。
感谢您提供任何帮助
答案 0 :(得分:2)
我会使用索引,但检查大小是否低于索引,因此您不会在IndexOutOfBoundsException中运行:
ArrayList<Car> carsList = new ArrayList<>();
for (Customer cust : customers) {
for (int i = 0; i < cust.cars.length; i++) {
if (carsList.size() > i) {
carsList.set(i, cust.cars[i]);
} else {
carsList.add(cust.cars[i]);
}
}
}