【发布时间】: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;
}
}
}
}
}
【问题讨论】: