【发布时间】:2015-06-02 23:55:45
【问题描述】:
我有一个程序,可以根据人们与其他人并排座位的偏好来安排他们的座位。他们坐在有一定数量座位的桌子旁。然后桌子上的每个座位都有一个分配给它的人,那个人有一个他们想坐在旁边的偏好列表。首选项的值从 1 到 6。
例如)
Bob 在 1 号座位, 他更喜欢坐在吉尔旁边,
这种偏好被评为 6。他真的很想坐在她旁边。
Jill 在 2 号座位,
她更喜欢坐在评分为 6 的 Bob 旁边。
乔希在 3 号座位,
他更喜欢坐在不在桌子旁的大卫旁边。 (他的偏好分数不会被计算在内)
彼得在最后一个座位,4号座位。
他的偏好是 Josh,值为 3,而 Bob,值为 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() 只会返回特定座位上的人的姓名
在此示例中,外部循环将遍历桌子上的座位。内部循环将遍历餐桌上每个人(或座位)的偏好。由于有些人会比其他人有更多的偏好,因此内部循环不会有恒定的迭代次数。它会因人的喜好而异。
这个例子的问题是第 3 行,在 if 语句中
seatsList.get(j).getName()
由于一个人的偏好数量有可能比餐桌上的座位数量长,您会得到一个索引超出范围的错误。
无论如何我可以做到这一点吗?这意味着,找出一个人的任何偏好是否与他们坐在桌旁。答案可能就在我眼前。如果有人好奇,那就是涉及遗传算法的学校作业。
【问题讨论】:
-
您想知道任何个人的喜好是否与他们坐在桌边?或者您想知道所有的偏好是否都与他们一起讨论?
-
@Quicksilver002 任何一个
标签: java indexing arraylist indexoutofboundsexception genetic-algorithm