【问题标题】:How to make a diverse room switcher based on previous rooms?如何根据以前的房间制作多样化的房间切换器?
【发布时间】:2016-02-02 17:47:54
【问题描述】:

好的,所以我正在制作一个房间切换器,它将学生重新分类为 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;
                }
            }
        }
    }
}

【问题讨论】:

标签: java methods


【解决方案1】:

我终于明白了!我使用的最终完美的解决方案是将女孩分成 3 个单独的数组。 下面是那些感兴趣的人的代码,它可能看起来有点复杂,但我向你保证,它比我之前使用一个随机数组时尝试的所有其他奇怪的解决方案要简单得多。这确实是我一直在寻找的简单解决方案。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    相关资源
    最近更新 更多