首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在以前房间的基础上制作一个多样化的房间交换机?

如何在以前房间的基础上制作一个多样化的房间交换机?
EN

Stack Overflow用户
提问于 2016-02-02 17:47:54
回答 1查看 33关注 0票数 0

好的,我正在做一个房间切换器,它把学生分成6个房间--3个男生房间和3个女生房间。有18名男生和20名女生,每个房间可容纳6名学生,只有2名女生可容纳7名学生。

所以我很久以前就想好了如何把人随机分成几个房间。我想出了如何以一种不同的方式把男人分类进他们的房间--这样每个人就只能和前一个房间里的一个人在一起了(最低限度)。我真正挣扎的地方是和女孩们在一起。所以我希望房间尽可能的多样化,这意味着我希望女孩的房间是:2,2,2,2,3;2,2,3 (每个数字代表2/3的女孩在前学期一起住在一起)。这部分我一直很纠结。我一整天都在挣扎,尝试了这么多不同的方法来实现这一点,而每一种方法都以不同的方式失败了。

所以现在我在寻求帮助。我在这里发布了男生多样化的分类程序代码,如果这里的任何人能帮我把它改编成工作女孩的多样化分类器代码,我会非常感激的--记住我已经尝试了十几种不同的方法。

代码语言:javascript
复制
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;
                }
            }
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-03 02:39:46

我终于想出来了!我最终使用的解决方案是将女孩分成三个不同的数组。下面是那些感兴趣的人的代码,它看起来可能有点复杂,但我向您保证,它比我之前尝试过的所有其他奇怪的解决方案都简单得多,当时我正在使用一个随机数组。事实上,这是我一直在寻找的简单解决方案。

代码语言:javascript
复制
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();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35160390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档