У меня есть приложение, которое генерирует случайное арифметическое выражение. Затем он генерирует правильный ответ в случайной позиции (tag
) и три последующих неправильных ответа, позволяющих пользователю выбирать.
Изначально я использовал ArrayList
, но он дает дубликаты. Затем я преобразовал содержимое ArrayList
в for loop
в Set
, и оно все еще дало дубликаты. Затем я изменил начальный ArrayList
на LinkedHashSet
и, увы, все еще дублирует. Я думаю, что это может быть размещение в моем for loop
, но я попытался возиться с позицией, и я либо сталкиваюсь с дубликатами, либо с Index
проблемами.
Я не хочу использовать Java 8
: List<String> deDupStringList3 = strList.stream().distinct().collect(Collectors.toList());
, поскольку это API/Version
специфично.
For Loop
Код:
List<Integer> answers = new ArrayList<>(new HashSet<Integer>(5));
answers.clear();
int incorrectAnswer;
for (int i = 0; i < 4; i++) {
if (i == locCorrectAnswer) {
answers.add(value);
} else {
if (operator == '+') {
incorrectAnswer = value + rand.nextInt(10) + 1;
} else {
incorrectAnswer = value - rand.nextInt(10) + 1;
}
while (incorrectAnswer == value) {
if (operator == '+') {
incorrectAnswer = value + rand.nextInt(10) + 1;
} else {
incorrectAnswer = value - rand.nextInt(10) + 1;
}
}
answers.add(incorrectAnswer);
}
}
For Loop
код (с ArrayList
и преобразованием в Set
):
ArrayList <Integer> answers;
Set<Integer> s = new LinkedHashSet<>(answers);
int incorrectAnswer;
for (int i = 0; i < 4; i++) {
if (i == locCorrectAnswer) {
answers.add(value);
} else {
if (operator == '+') {
incorrectAnswer = value + rand.nextInt(10) + 1;
} else {
incorrectAnswer = value - rand.nextInt(10) + 1;
}
while (incorrectAnswer == value) {
if (operator == '+') {
incorrectAnswer = value + rand.nextInt(10) + 1;
} else {
incorrectAnswer = value - rand.nextInt(10) + 1;
}
}
answers.add(incorrectAnswer);
}
s.addAll(answers);
answers.clear();
answers.addAll(s);
}
Я уверен, что это простая ошибка, но я ее не вижу.