Android Studio (Java) не получает последовательно правильные значения кнопок - PullRequest
0 голосов
/ 14 февраля 2020

В настоящее время я работаю над игрой, в которой игроки должны решить для X + Y с выбором 3 кнопок (1 из которых является ответом) и кнопкой «Далее» для go до следующего вопроса (путем замены значений компонентов в следующий вопрос). Однако я не могу подсчитать ответы, потому что мой проверенный выбор (кнопка) всегда проверяет значения следующего вопроса

Чтобы дать небольшой контекст,
questionCategories - это ArrayList ArrayList с разными уровнями
например, questionCategories.get (selectedLevel) возвращает ArrayList с различной арифметикой

jumbleOptions заполняет 3 кнопки правильные и неправильные ответы, которые содержатся в вариантах

У меня возникает ситуация, когда при ответе на вопрос 1 показанные значения параметров относятся к вопросу 1, но проверенные значения (в тест) из Вопроса 2.

например,
Qn1: 3 + 5 - A: 2, B: 8, C: 4
Qn2: 8 + 2 - A : 10, B: 11, C: 12
Когда я пытаюсь выполнить Qn1 на B и нажимаю «Далее», чтобы go перейти к следующему вопросу (и проверить правильность), вместо проверки B: 8 моя программа завершает тестирование B: 11 . Я попытался записать полученные значения каждой кнопки и ответа на вопрос, но все они верны, и я не уверен, где я go ошибался.

Фрагмент кода находится в пределах onViewCreated, первый вопрос инициализируется для отображения из-за текста заполнителя в исходном элементе. Извините, если фрагмент кода не имеет особого смысла, пытаясь сделать его коротким, чтобы он (надеюсь) был более читабельным.

// Initialize first question to display
questionNumber.setText("Question " + String.valueOf(qnNumDisplay));
questionTitle.setText(((questionCategories.get(selectedLevel)).get(0)).toString());
jumbleOptions(((questionCategories.get(selectedLevel)).get(0)));

do {
    nextButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final Question q = (questionCategories.get(selectedLevel)).get(numQnAnswered);
            // Increment question number related variable
            numQnAnswered++;
            // Replace displayable elements with next question
            //Question Number
            questionNumber.setText("Question " + String.valueOf(numQnAnswered));

            questionTitle.setText(q.toString());
            jumbleOptions(((questionCategories.get(selectedLevel)).get(numQnAnswered)));

            boolean test = checkAnswer(String.valueOf(q.getAnswer()),
                options.get(SELECTED_OPTION).getText().toString());
            Log.d("Answer Correctness", String.valueOf(test));
        }
    });
    counter++;
} while (counter < NUMBER_OF_QNS);

1 Ответ

0 голосов
/ 14 февраля 2020

Давайте смоделируем сценарий: первый вопрос задается вручную, а следующий вопрос загружается на основе нажатия кнопки. Я предполагаю, что numQnAnswered - это 0, и вы получаете ответ от вашего Question объекта numQnAnswered -ой позиции, верно?

final Question q = (questionCategories.get(selectedLevel)).get(numQnAnswered);

Как говорят ваши коды. Обратите внимание, здесь внимательно:

// Increment question number related variable
numQnAnswered++;

Теперь проблема, однако, заключается в том, что ответ проверяется внутри нажатия кнопки, я думаю, вы забыли тот факт, что первый вопрос был задан вручную ... & перед проверкой ответом на этот вопрос вы увеличили переменную numQnAnswered, поэтому ваш вопрос на шаг отстает от вашего ответа. Надеюсь, что это имеет смысл.

Просто уменьшите значение переменной numQnAnswered после проверки текущего вопроса.

// Initialize first question to display
questionNumber.setText("Question " + String.valueOf(qnNumDisplay));
questionTitle.setText(((questionCategories.get(selectedLevel)).get(0)).toString());
jumbleOptions(((questionCategories.get(selectedLevel)).get(0)));

do {
    nextButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final Question q = (questionCategories.get(selectedLevel)).get(numQnAnswered);
            // first we need to check answer of previous question 
            boolean test = checkAnswer(String.valueOf(q.getAnswer()),
                options.get(SELECTED_OPTION).getText().toString());
            Log.d("Answer Correctness", String.valueOf(test));

            // Increment question number related variable
            numQnAnswered++;
            // Replace displayable elements with next question
            //Question Number
            questionNumber.setText("Question " + String.valueOf(numQnAnswered));

            questionTitle.setText(q.toString());
            jumbleOptions(((questionCategories.get(selectedLevel)).get(numQnAnswered)));


        }
    });
    counter++;
} while (counter < NUMBER_OF_QNS);
...