@Override public int makeGuess(char letter) throws IllegalStateException, IllegalArgumentException { if (letter < 97 || letter > 122) { throw new IllegalArgumentException(); } if (previousGuesses.contains(letter)) { throw new IllegalArgumentException(); } previousGuesses.add(letter); if (guessesLeft < 1) { throw new IllegalStateException(); } Map> families = new TreeMap<>(); Iterator iterator= word.iterator(); for (int i = 0; i < word.size(); i++) { String words = iterator.next(); this.chosenWord = words; String pattern = this.getPattern(); if (!families.containsKey(pattern)) { families.put(pattern, new TreeSet<>(word)); } families.get(pattern).add(words); } int maxSize = 0; String maxPattern = ""; for (String pattern : families.keySet()) { if (families.get(pattern).size() > maxSize) { maxSize = families.get(pattern).size(); maxPattern = pattern; } } this.chosenWord = families.get(maxPattern).last(); previousGuesses.add(letter); int count = 0; for (int i = 0; i < chosenWord.length(); i++) { if (chosenWord.charAt(i) == letter) { count++; } } if (count == 0) { guessesLeft--; } return count; }