问题描述: 假设在周末舞会上,男士们和女士们进入舞厅时各自排成一队,跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴,若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲,跳完舞的人,按原来的次序依次重新回到原来的队列的末尾。现要求设计一个函数模拟上述舞伴配对问题,试设计程序实现之。假设有5位女生,8位男生,那么前三支舞曲的配对情况应该如下所示:
男女生数量m和n都应该用变量表示,要求实验打印并输出前K(K>=1)支舞曲的配对情况
package com.test.model.loopqueue;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Scanner;
public class Dance {
private final List<String> boyList = new ArrayList<>();
private final List<String> girlList = new ArrayList<>();
public static Integer count;
public Dance(int boyList, int girlList) {
init(boyList, girlList);
}
public void init(int boy, int girl) {
for (int i = 1; i <= boy; i++) {
this.boyList.add("Boy:" + i);
}
for (int i = 1; i <= girl; i++) {
this.girlList.add("Girl:" + i);
}
}
public int getMin() {
return Math.min(boyList.size(), girlList.size());
}
public void go() {
int i = 1;
int girlIndex = 0;
int boyIndex = 0;
while (i <= count) {
System.out.println("------第" + (i) + "次---------");
for (int j = 0; j < getMin(); j++) {
girlIndex = girlIndex >= girlList.size() ? 0 : girlIndex;
boyIndex = boyIndex >= boyList.size() ? 0 : boyIndex;
System.out.println(girlList.get(girlIndex) + "匹配男生" + boyList.get(boyIndex));
girlIndex++;
boyIndex++;
}
i++;
}
}
public static void main(String[] args) {
System.out.println("请输入男士人数:");
Scanner src = new Scanner(System.in);
String boy = src.next();
System.out.println("请输入女士人数:");
String girl = src.next();
Dance dance = new Dance(Integer.parseInt(boy), Integer.parseInt(girl));
System.out.println("请输入舞曲次数:");
count = Integer.parseInt(src.next());
dance.go();
}
}