比较ArrayLists

时间:2015-03-30 04:04:01

标签: java indexing arraylist indexoutofboundsexception genetic-algorithm

我有一个程序可以让人们根据自己的偏好来安排旁边的人。他们坐在有一定数量座位的桌子旁。然后,桌子上的每个座位都有一个分配给它的人员,该人员有一个他们想要坐在旁边的偏好列表。偏好的价值从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()

由于某人可能拥有的偏好数量可能比表格中的席位数量长,因此您会得到一个超出界限的索引错误。

无论如何,我能做到这一点吗?这意味着,找出一个人的任何偏好是否与他们坐在一起。答案可能就在我面前。如果有人好奇,那就是涉及遗传算法的学校作业。

1 个答案:

答案 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;
      }
    }
  }
}

有点粗糙,但那应该有用。