Jiachen-Zhang
2/21/2019 - 12:13 PM

Randomly samples generator

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