我有一个程序可以让人们根据自己的偏好来安排旁边的人。他们坐在有一定数量座位的桌子旁。然后,桌子上的每个座位都有一个分配给它的人员,该人员有一个他们想要坐在旁边的偏好列表。偏好的价值从1-6开始。
离)
鲍勃在座位1, 他宁愿坐在吉尔旁边,并且该偏好被评为6.他真的想坐在她旁边。
Jill在第2位,
她最喜欢坐在旁边的鲍勃,也被评为6。
Josh在第3位,
他倾向于坐在不在桌旁的大卫旁边。 (他的偏好分数不计算在内)
彼得位于最后一席,座位4。
他的偏好是Josh,值为3,而鲍勃,值为5。
如何使用ArrayLists检查Person的首选项中的Name是否在桌面上,有什么好方法?
这就是我的想法
for (int i = 0; i < seatsList.size(); i++) { // For the seats at the table
for (int j = 0; j < seatsList.get(i).getPrefArrayList().size(); j++) { // For the prefList for each seat
if(seatsList.get(i).getPrefArrayList().contains(seatsList.get(j).getName())){
//score += seatsList.get(i).getOnePrefValue(j); //IGNORE THIS LINE FOR NOW(NOT REALLY IMPORTANT)
}
}
}
seatsList
是一个包含所有席位的ArrayList。
getPrefArrayList()
返回该人的所有偏好的ArrayList。
getName()
只会返回特定席位的人名
在此示例中,外部循环将遍历桌面上的席位。内循环将遍历表中每个Person(或席位)的首选项。由于某些人将比其他人拥有更多的偏好,因此内部循环将没有恒定的迭代量。它会根据个人的偏好而有所不同。
此示例的问题是第3行,在if语句
中seatsList.get(j).getName()
由于某人可能拥有的偏好数量可能比表格中的席位数量长,因此您会得到一个超出界限的索引错误。
无论如何,我能做到这一点吗?这意味着,找出一个人的任何偏好是否与他们坐在一起。答案可能就在我面前。如果有人好奇,那就是涉及遗传算法的学校作业。
答案 0 :(得分:0)
尝试这样的事情:
for(Seat seat : seatsList){ //or whatever object type is in seatsList
boolean seatHasPreferenceAtTable = false;
for(Preference preference : seat.getPrefArrayList()){//or whatever object type is in getPrefArrayList()
for(Seat otherSeat : seatsList){
if(otherSeat.getName().equals(preference.getName())){
seatHasPreferenceAtTable = true;
}
}
}
}
有点粗糙,但那应该有用。