Поиск несовпавших значений одного массива в другом

Есть следующее задание: Компьютер генерирует пять чисел в диапазоне от 1 до 15 включительно. Человек пытается их угадать. Программа должна выводить угаданные и неугаданные числа из тех, что сгенерировала программа, а также ошибочные числа пользователя. Помогите, пожалуйста, сделать это, следуя принципу Single Responsibility.

Я описал следующие методы:

  1. Генератор массива из 5 случайных чисел в заданном диапазоне:
    private int getRandomNumber(int minLimit, int maxLimit) {
        maxLimit -= minLimit;
        return (int) (Math.random() * ++maxLimit) + minLimit;
    }
    
  2. Заполнитель массива:
    private int[] getFillArray(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            arr[i] = getRandomNumber(1, 15);
        }
        return arr;
    }
    
  3. Поисковик совпадений:
    private Set<Integer> getMatches(int[] generated, int[] guesses) {
        Set<Integer> matches = new HashSet<>();
        for (int guess : guesses) {
            for (int generatedNumber : generated) {
                if (guess == generatedNumber) {
                    matches.add(guess);
                }
            }
        }
        return matches;
    }
    

И вот, к сожалению, уже который час не могу понять как описать логику поиска несовпадений(абсурд полный)...


Ответы (1 шт):

Автор решения: Axifive

Переменная-флаг нужна в случае поиска отсутствующих в массиве значений.

Алгоритм: Перебираются значения, в случае совпадения, меняем значение флага и прерываем вложенный цикл, в ином случае происходит полный проход цикла и флаг остается с исходным значением. Далее проверяем значение флага и вносим/пропускаем предложенное число.

private Set<Integer> getMisses(int[] generated, int[] guesses){
    Set<Integer> misses = new HashSet<>();
    for (int guess: guesses){
        boolean found = false;
        for (int generatedNumber: generated){
            if (guess == generatedNumber){
                found = true;
                break;
            }
        }
        if (!found) {
           misses.add(guess);
        }
    }
    return misses;
}
→ Ссылка