【问题标题】:Comparing ArrayLists比较 ArrayList
【发布时间】: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


【解决方案1】:

试试这样的:

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

有点粗糙,但应该可以。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 2016-08-08
    相关资源
    最近更新 更多