如何根据以前的房间制作多样化的房间切换台?

时间:2016-02-02 17:47:55

标签: java methods

好的,所以我正在制作一个房间切换器,将学生重新分成6个房间--3个房间和3个女孩房间。有18个男人和20个女孩,每个房间有6个学生,除了两个女孩房间,有7个。

所以我很久以前就知道如何让人们随机分成房间。而且我想出了如何以一种多样化的方式将人们分类到他们的房间 - 这样每个人只会和他前一个房间里的另一个人(最小)一起。我真正在与女孩们挣扎的地方。所以我希望房间尽可能多样化,这意味着我希望女孩房间是:2,2,2; 2,2,3; 2,2,3(每个数字代表2/3女孩,她们之前在上学期一起在一个房间里)。这一部分我真的很挣扎。我整天都在苦苦挣扎,尝试了很多不同的方法来实现这一目标,每种方式都有所不同。

现在我正在寻求帮助。我在这里发布了各种各样的分拣机代码,并且非常感谢这里的任何人可以帮助我将其调整为工作女孩多样化的分拣机代码 - 记住我已经尝试过十几种不同的方式。

protected static Person[] Guys = new Person[]{
    new Person("Guy0", 'M', 6),
    new Person("Guy1", 'M', 6),
    new Person("Guy2", 'M', 5),6
    new Person("Guy3", 'M', 4),
    new Person("Guy4", 'M', 6),
    new Person("Guy5", 'M', 5),
    new Person("Guy6", 'M', 6),
    new Person("Guy7", 'M', 4),
    new Person("Guy8", 'M', 4),
    new Person("Guy9", 'M', 5),
    new Person("Guy10", 'M', 5),
    new Person("Guy11", 'M', 5),
    new Person("Guy12", 'M', 4),
    new Person("Guy13", 'M', 4),
    new Person("Guy14", 'M', 6),
    new Person("Guy15", 'M', 5),
    new Person("Guy16", 'M', 4),
    new Person("Guy17", 'M', 6)};

public static void GuysDiverse() {
    resetGuyRooms();
    Randomize(Guys);
    for (int srtM = 0; srtM < Guys.length; srtM++) {
        done = false;
        Person newMove = Guys[srtM];
        {
            while (!done) {
                newMove.rndRoom(); //sets random number from 4 to 6
                switch (newMove.getPrevRoom()) {
                    case 1:
                    case 4:
                        if (newMove.getCurRoom() == 4 && !room4.isFull() && room4.getFromRoom1or4() < 2) {
                            room4.add(newMove);
                            done = true;
                        } else if (newMove.getCurRoom() == 5 && !room5.isFull() && room5.getFromRoom1or4() < 2) {
                            room5.add(newMove);
                            done = true;
                        } else if (newMove.getCurRoom() == 6 && !room6.isFull() && room6.getFromRoom1or4() < 2) {
                            room6.add(newMove);
                            done = true;
                        }
                        break;
                    case 2:
                    case 5:
                        if (newMove.getCurRoom() == 4 && !room4.isFull() && room4.getFromRoom2or5() < 2) {
                            room4.add(newMove);
                            done = true;
                        } else if (newMove.getCurRoom() == 5 && !room5.isFull() && room5.getFromRoom2or5() < 2) {
                            room5.add(newMove);
                            done = true;
                        } else if (newMove.getCurRoom() == 6 && !room6.isFull() && room6.getFromRoom2or5() < 2) {
                            room6.add(newMove);
                            done = true;
                        }
                        break;
                    case 3:
                    case 6:
                        if (newMove.getCurRoom() == 4 && !room4.isFull() && room4.getFromRoom3or6() < 2) {
                            room4.add(newMove);
                            done = true;
                        } else if (newMove.getCurRoom() == 5 && !room5.isFull() && room5.getFromRoom3or6() < 2) {
                            room5.add(newMove);
                            done = true;
                        } else if (newMove.getCurRoom() == 6 && !room6.isFull() && room6.getFromRoom3or6() < 2) {
                            room6.add(newMove);
                            done = true;
                        }
                        break;
                    default:
                        break;
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

I finally figured it out! The solution I used which finally worked perfectly was to split the girls into 3 separate arrays. Below is the code for those interested, it might look a little complex but I assure you it is much simpler than all the other weird solutions I attempted before when I was working with one random array. Indeed this was the simple solution I've been looking for.

public static void GirlsDiverse() {
    resetGirlRooms();
    Randomize(Girls);
    for (int srtF1 = 0; srtF1 < room1Arr.length; srtF1++) {
        done = false;
        newMove = room1Arr[srtF1];
        //if()
        {
            while (!done) {
                newMove.rndRoom(); //sets random number from 1 to 3
                if (newMove.getPrevRoom() == 1) {
                    {
                        if (newMove.getCurRoom() == 1 && !room1.isFull() && room1.getFromRoom1or4() < 2) {
                            room1.add(newMove);
                            done = true;
                        } else if (newMove.getCurRoom() == 2 && !room2.isFull() && room2.getFromRoom1or4() < 2) {
                            room2.add(newMove);
                            done = true;
                        } else if (newMove.getCurRoom() == 3 && !room3.isFull() && room3.getFromRoom1or4() < 2) {
                            room3.add(newMove);
                            done = true;
                        }
                    }
                }
            }
        }
    }
    for (int srtF2 = 0; srtF2 < room2Arr.length - 1; srtF2++) {
        done = false;
        newMove = room2Arr[srtF2];
        //if()
        {
            while (!done) {
                newMove.rndRoom(); //sets random number from 1 to 3
                if (newMove.getPrevRoom() == 2) {
                    {
                        if (newMove.getCurRoom() == 1 && !room1.isFull() && room1.getFromRoom2or5() < 2) {
                            room1.add(newMove);
                            done = true;
                        } else if (newMove.getCurRoom() == 2 && !room2.isFull() && room2.getFromRoom2or5() < 2) {
                            room2.add(newMove);
                            done = true;
                        } else if (newMove.getCurRoom() == 3 && !room3.isFull() && room3.getFromRoom2or5() < 2) {
                            room3.add(newMove);
                            done = true;
                        }
                    }
                }
            }
        }
    }
    for (int srtF3 = 0; srtF3 < room3Arr.length - 1; srtF3++) {
        done = false;
        newMove = room3Arr[srtF3];
        //if()
        {
            while (!done) {
                newMove.rndRoom(); //sets random number from 1 to 3
                if (newMove.getPrevRoom() == 3) {
                    {
                        if (newMove.getCurRoom() == 1 && !room1.isFull() && room1.getFromRoom3or6() < 2) {
                            room1.add(newMove);
                            done = true;
                        } else if (newMove.getCurRoom() == 2 && !room2.isFull() && room2.getFromRoom3or6() < 2) {
                            room2.add(newMove);
                            done = true;
                        } else if (newMove.getCurRoom() == 3 && !room3.isFull() && room3.getFromRoom3or6() < 2) {
                            room3.add(newMove);
                            done = true;
                        }
                    }
                }
            }
        }
    }

    for (int srtF2b = room2Arr.length-1; srtF2b < room2Arr.length; srtF2b++) {
        done = false;
        newMove = room2Arr[srtF2b];
        //if()
        {
            while (!done) {
                newMove.rndRoom(); //sets random number from 1 to 3
                if (newMove.getPrevRoom() == 2) {
                    {
                        if (newMove.getCurRoom() == 1 && !room1.isFull() && room1.getFromRoom2or5() < 3) {
                            room1.add(newMove);
                            done = true;
                        } else if (newMove.getCurRoom() == 2 && !room2.isFull() && room2.getFromRoom2or5() < 3) {
                            room2.add(newMove);
                            done = true;
                        } else if (newMove.getCurRoom() == 3 && !room3.isFull() && room3.getFromRoom2or5() < 3) {
                            room3.add(newMove);
                            done = true;
                        }
                    }
                }
            }
        }
    }
    for (int srtF3b = room3Arr.length - 1; srtF3b < room3Arr.length; srtF3b++) {
        done = false;
        newMove = room3Arr[srtF3b];
        //if()
        {
            while (!done) {
                newMove.rndRoom(); //sets random number from 1 to 3
                if (newMove.getPrevRoom() == 3) {
                    {
                        if (newMove.getCurRoom() == 1 && !room1.isFull() && room1.getFromRoom3or6() < 3) {
                            room1.add(newMove);
                            done = true;
                        } else if (newMove.getCurRoom() == 2 && !room2.isFull() && room2.getFromRoom3or6() < 3) {
                            room2.add(newMove);
                            done = true;
                        } else if (newMove.getCurRoom() == 3 && !room3.isFull() && room3.getFromRoom3or6() < 3) {
                            room3.add(newMove);
                            done = true;
                        }
                    }
                }
            }
        }
    }
    room1.shuffleRoom();
    room2.shuffleRoom();
    room3.shuffleRoom();
}