比较数组列表

Comparing ArrayLists

我有一个程序可以根据人们喜欢坐在其他人旁边的偏好安排他们的座位。他们坐在 table 秒,座位数固定。 table 的每个座位都分配了一个人,这个人有一个他们想坐在谁旁边的偏好列表。偏好值从1-6.

例如)

Bob 在座位 1, 他偏爱坐在吉尔旁边,

那个偏好是6分。他真的很想坐在她旁边。

Jill 在座位 2,

她更喜欢坐在 Bob 旁边,Bob 的评分也是 6。

Josh 坐在 3 号座位上,

他偏爱坐在不在 table 旁边的大卫旁边。 (他的偏好分数不会被计算在内)

Peter 在最后一个座位,第 4 个座位。

他的偏好是 Josh,值为 3,Bob,值为 5。

关于如何使用 ArrayLists 检查 Person 首选项中的名称是否在 table 的好方法是什么?

这是我想出来的

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() return 是那个人所有偏好的 ArrayList。

getName() 将只是 return 特定座位上的人的名字

在此示例中,外循环将遍历 table 的座位。内部循环将遍历 table 处每个人(或座位)的偏好。由于有些人会比其他人有更多的偏好,因此内部循环不会有固定的迭代次数。会因人的喜好而异。

这个例子的问题是第 3 行,在 if 语句中

seatsList.get(j).getName()

由于一个人的偏好数量有可能比 table 的座位数量长,因此您会得到索引越界错误。

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

尝试这样的事情:

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

有点粗糙,但应该可以。