import static java.util.Arrays.deepToString; import java.util.Arrays; import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.Random; import java.util.Queue; class SecretSanta { public String[][] go(String[] s) { List<String> partnerPool = new LinkedList<String>(Arrays.asList(s)); Collections.shuffle(partnerPool); String[][] secretSantaList = new String[partnerPool.size()][2]; for (int i=0; i<s.length; i++) { String partner = partnerPool.remove(0); if (s[i].equals(partner)) { partnerPool.add(partner); partner = partnerPool.remove(0); } secretSantaList[i][0] = s[i]; secretSantaList[i][1] = partner; } return secretSantaList; } public static void main(String... args) { String[] players = new String[] {"Fred", "Wilma", "Barney", "Pebbles", "Bam Bam"}; String[][] santas = new SecretSanta().go(players); System.out.println(deepToString(santas)); } }