package com.mathlearning.model; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public abstract class AbstractQuestionGenerator implements QuestionGenerator { @Override public List generateQuestions(String level, int count) { List questions = new ArrayList<>(); Set questionTexts = new HashSet<>(); for (int i = 0; i < count; i++) { Question question = generateUniqueQuestion(level, i, questionTexts); if (question != null) { questions.add(question); } } return questions; } private Question generateUniqueQuestion(String level, int index, Set questionTexts) { Question question; int attempt = 0; do { question = generateQuestion(level, index); attempt++; } while (question != null && questionTexts.contains(question.getQuestionText()) && attempt < 10); if (question != null) { questionTexts.add(question.getQuestionText()); } return question; } protected abstract Question generateQuestion(String level, int index); }