Поиск несовпавших значений одного массива в другом
Есть следующее задание: Компьютер генерирует пять чисел в диапазоне от 1 до 15 включительно. Человек пытается их угадать. Программа должна выводить угаданные и неугаданные числа из тех, что сгенерировала программа, а также ошибочные числа пользователя. Помогите, пожалуйста, сделать это, следуя принципу Single Responsibility.
Я описал следующие методы:
- Генератор массива из 5 случайных чисел в заданном диапазоне:
private int getRandomNumber(int minLimit, int maxLimit) { maxLimit -= minLimit; return (int) (Math.random() * ++maxLimit) + minLimit; } - Заполнитель массива:
private int[] getFillArray(int[] arr) { for (int i = 0; i < arr.length - 1; i++) { arr[i] = getRandomNumber(1, 15); } return arr; } - Поисковик совпадений:
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 шт):
Переменная-флаг нужна в случае поиска отсутствующих в массиве значений.
Алгоритм: Перебираются значения, в случае совпадения, меняем значение флага и прерываем вложенный цикл, в ином случае происходит полный проход цикла и флаг остается с исходным значением. Далее проверяем значение флага и вносим/пропускаем предложенное число.
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;
}