Randomly samples generator
public class StableMatchGenerator {
private int N;
private Person[] womenSet;
private Person[] menSet;
public StableMatchGenerator(int scale) {
if (scale < 1) {
throw new IllegalArgumentException("Illegal constructor argument: scale");
}
this.N = scale;
this.womenSet = new Person[scale];
this.menSet = new Person[scale];
generatePreferList(menSet, womenSet);
shufflePreferList(menSet, womenSet);
}
private void shufflePreferList(Person[] menSet, Person[] womenSet) {
for (int i = 0; i < N; i++) {
String[] preferList = menSet[i].preferList;
menSet[i].preferList = shuffleArray(preferList);
preferList = womenSet[i].preferList;
womenSet[i].preferList = shuffleArray(preferList);
}
}
private String[] shuffleArray(String[] nameArr) {
for (int i = 0; i < N; i++) {
int j = i + (int) (Math.random() * (N-i)); // between i and n-1
String swap = nameArr[i];
nameArr[i] = nameArr[j];
nameArr[j] = swap;
}
return nameArr;
}
private void generatePreferList(Person[] menSet, Person[] womenSet) {
String[] preferMenSet = new String[N];
String[] preferWomenSet = new String[N];
for (int i = 0; i < N; i++) {
preferMenSet[i] = "M"+i;
preferWomenSet[i] = "W"+i;
}
for (int i = 0; i < N; i++) {
menSet[i] = new Person(preferMenSet[i], preferWomenSet.clone());
womenSet[i] = new Person(preferWomenSet[i], preferMenSet.clone());
}
}
private class Person{
String name;
String[] preferList;
public Person(String name, String[] preferList){
this.name = name;
this.preferList = preferList;
}
@Override
public String toString() {
StringBuilder str = new StringBuilder();
str.append(name + " ");
for (int i = 0; i < N; i++) {
str.append(preferList[i] + " ");
}
// str.append("\n");
return str.toString();
}
}
@Override
public String toString() {
StringBuilder s = new StringBuilder();
s.append(N+ " ");
// s.append("\n");
// TODO: toString
// men
for (int i = 0; i < N; i++) {
s.append(menSet[i]);
}
// s.append("\n");
// women
for (int i = 0; i < N; i++) {
s.append(womenSet[i]);
}
return s.toString();
}
public static void main(String[] args){
StableMatchGenerator stableMatchGenerator = new StableMatchGenerator(5);
System.out.println(stableMatchGenerator.toString());
}
}