Сравнение списка и подсчет очков
Продолжаю работать над системой ачивок в игре, сделал подсчет таким образом:
Каждый String - своя задача, переменная alen#определяет сколько раз выполнено действие (подтягивается автоматом из статистики). Есть 5 типов заданий, но будет больше, около 20 типов, и всего более 301 заданий-ачивок.
String task_1 = "Слово из 3 букв собранно " + alen_1 + " раза";
String task_2 = "Слово из 3 букв собранно " + alen_2 + " раза";
...
...
String task_n = "Слово из 3 букв собранно " + alen_n + " раза";
String task_n+1 = "Слово из 3 букв собранно " + alen_n+1 + " раза";
...
...
Есть два листа
ArrayList<String> TaskDone = new ArrayList<>(); - выполненные задачи и список всех возможных: ArrayList<String> LogQA = new ArrayList<>();
Метод проверяющий правильность выполнения заданий. int ASD - буферная переменная для очков от ачивок. Хотел сделать более-менее универсальный метод, но выходит громоздко. Можно как-то поправить и улучшить это? Думаю, что скорей всего надо будет переносить это в БД, но пока до них не дошел:
int ASD;
public void PrintShow(){
if (LogQA.contains(task_1)){
TaskDone.add(task_1);
this.asd += 3;
LogQA.remove(task_1);
} else if(LogQA.contains(task_2)){
TaskDone.add(task_2);
this.asd += 4;
LogQA.remove(task_2);
}
...
...
else{
textTask.setText("Уже выполнено");
}
}
Ответы (1 шт):
Для хранения задач лучше завести структуру данных, скажем тот-же самый ArrayList.
List<String> taskList = new ArrayList<>();
List<String> taskDone = new ArrayList<>();
List<String> logQA = new ArrayList<>();
Тогда, как простейший вариант, можно в цикле пробежать по нему и свериться с TaskDone. Так будет короче.
for (String eachString : taskList) {
if (logQA.contains(eachString)) {
taskDone.add(eachString);
logQA.remove(eachString);
}
}
PS. Пожалуйста, соблюдайте code conventions, пишите названия переменных с маленькой буквы, TaskDone.add() читается так, как будто вы хотите вызвать статический метод у класса.