我怎么能“Round-Robin”2阵列列表

时间:2014-01-21 14:41:04

标签: java arraylist round-robin

我有一份上学的任务,我需要制作一个程序,自动让夫妻上学。在这种情况下,有6节课,每节课与不同的人合作。因此,在第1周,与b人合作,接下来几周他不能与人合作。

我已经编写了一些代码将这个类拆分为2,但我不知道如何每周更换这对夫妇。

这是我已经拥有的代码(抱歉,它不是英文):

public void maakKoppels() {
        if (leerlingenLijst.size() % 2 == 1) {
            leerlingenLijst.add(new Leerling("Bye")); // if you have an odd number of students it adds the "Bye" student
        }

        for (int i = 1; i <= 6; i++) {
            maakKoppels(i, leerlingenLijst); //its needed for 6 lessons so it does it 6 times
        }

    }

    public void maakKoppels(int weekNum, ArrayList<Leerling> leerlingenLijst) {
        int midden = leerlingenLijst.size() / 2; //split the arraylist in 2

        ArrayList lijst1 = new ArrayList();
        for (int j = 0; j < midden; j++) {
            lijst1.add(leerlingenLijst.get(j));
        }

        ArrayList lijst2 = new ArrayList();
        for (int j = leerlingenLijst.size() - 1; j >= midden; j--) {
            lijst2.add(leerlingenLijst.get(j));
        }

        practica.add(new Practicum(weekNum, lijst1, lijst2)); // here it fills the lessons with the 2 lists. weekNum is the lesson number and the name on lijst1 at index 0 couples with the name on lijst2 at index zero
    }

3 个答案:

答案 0 :(得分:0)

最简单的方法...从第一个arrayList中的第一个元素开始,然后对第二个arrayList进行洗牌并选择第一个元素..在arylist1中的第二个 - &gt;在arraylist2中的第二个..依此类推..现在将此数据添加为关键字地图中的值对..下次你创建情侣时,再次对第二个arraylist进行洗牌..现在为每对情侣制作,首先检查来自第二个arraylist的人是否存在地图中的同一个键。如果不是,请将值添加到List(地图的值),否则再次洗牌并尝试..您将需要一个键,在地图中列出...

Map<String,List> hm = new HashMap<String, List>();
List<String> l = new ArrayList<String>();
Collections.shuffle(arrayList2);

现在轮到你实现逻辑..对不起,我不能给你代码......

答案 1 :(得分:0)

将课程分成两部分是一个好的开始。现在你可以rotate list1同时保持list2不变并配对{list1.get(1),list2.get(1)},{list1.get(2),list2.get(2)}等。将list1旋转一周(一周)并重新执行。

如果您有超过12名学生将在六周内工作。通过这种方法,同一列表中的学生永远不可能是一对。

答案 2 :(得分:0)

解决方法如下......

  1. 将全班分成两个arraylists。 L1&amp; L2
  2. 创建变量offset = 0
  3. 第一周分配L1 [0]&amp; L2 [0 + offset]作为一对,L1 [1]&amp; L2 [1 + offset]作为另一对夫妇等等。
  4. 第二周设置offset = 1
  5. 指定L1 [0]&amp; L2 [0 +偏移]作为一对,但这次,由于偏移值增加,您实际上将L1 [0]和L2 [1]分配为一对。 6.为确保不超过L2的长度,请使用(0 +偏移)%L2。length()
  6. 这将确保你每周都有不同的情侣。