android: как получить правильный список ответов в игре-викторине со случайными вопросами и ответами?

Я создаю простую викторину. В этой игре вопрос и соответствующие ответы будут генерироваться случайным образом. Я создал список "q" для вопросов.

И для ответов я создал различные списки по 4 строки в каждом. Например, если вопрос - это 0 в списке q, ответы на этот вопрос будут в списке "a0", верно? Но у меня возникла проблема с получением строк в списке ответов. Я пробовал это:

    while(true){

            Integer nxt = rng.nextInt(6);

            if (!generated.contains(nxt))
            {
                generated.add(nxt);

                textView1.setText(((ArrayList<String>) q).get(nxt));

                String x;
                x = ("a" +nxt); 

                Collections.shuffle((x));

                btn1.setText(((ArrayList<String>) x).get(0));
                btn2.setText(((ArrayList<String>) x).get(1));
                btn3.setText(((ArrayList<String>) x).get(2));
                btn4.setText(((ArrayList<String>) x).get(3));


                break;
            }
    }

Я создал строку "x", чтобы получить правильный список. Если "nxt" равно 4, текст кнопок получит строки из списка a4.

Но в моем коде "Collections.shuffle" и "setText" пытаются найти список "x". Все идет не так, как я себе представлял.

Как я могу это исправить?

* Моя идея - проверить строку нажатой кнопки и сравнить с другим списком ПРАВИЛЬНЫХ ответов. Таким образом, я могу объяснить правильный ответ, а остальные 3 - неправильным.


person Community    schedule 04.03.2013    source источник
comment
Во-первых, x - это не список, это String. Возможно, вы имели в виду q; что раньше использовалось как список?   -  person Rob I    schedule 04.03.2013
comment
случайные ответы на вопросы? или случайно выбранные вопросы, каждый из которых имеет свой собственный набор неслучайных ответов? если это случайные ответы, как вы можете быть уверены, что кто-то из них действительно отвечает на вопрос?   -  person Marc B    schedule 04.03.2013
comment
Напоминает мне play.google.com/store/apps/details ? id = com.troubi.kingofmath   -  person poitroae    schedule 04.03.2013
comment
Ответы также будут отображаться в случайном порядке. Вот почему я помещаю Collections.shuffle перед тем, как передать текст на кнопку.   -  person    schedule 04.03.2013
comment
Моя идея - сгенерировать что-то вроде этого: 1 - сгенерировать случайное число nxt; 2 - получить ВОПРОС с этим номером nxt; 3 - манипулировать названием списка ответов, к которым будет осуществляться доступ. Если вопрос имеет номер 3 в списке q, список доступных ответов будет a + nxt, в этом случае nxt = 3.   -  person    schedule 04.03.2013


Ответы (2)


Я был бы удивлен, если бы этот код вообще компилировался и / или работал правильно. Вы пытаетесь использовать содержимое String в качестве имени переменной, преобразовать эту переменную в ArrayList<String>, а затем получить доступ к элементам. Это неверно на столь многих уровнях, что вам следует подумать о повторении нескольких руководств по Java.

Если вы считаете или чувствуете, что в любом случае можете продолжить, попробуйте следующий подход: вы не должны хранить вопросы и ответы в отдельном списке, а вместе в классе.

class Question
{
    //...
    // maybe id and other stuff belonging to a question
    //...

    String questionText;

    // separate because you need to tell the correct answer apart from the wrong ones later
    // you could also just always use the first one in a set of answers.
    String correctAnswerText; 
    ArrayList<String> wrongAnswerTexts;
 }

Затем вы можете сохранить свои вопросы в ArrayList<Question> в своем приложении и задать следующий ответ:

//...
// set up ArrayList<Question> questions here
//...

int nxt = rng.nextInt(6);

//...    
// make sure your list is actually long enough for the generated index
//...

Question nextQuestion = questions.get(nxt);

//...    
// make sure the retrieved object is valid
//...    
// set the question text to nextQuestion.questionText;
//...

ArrayList<String> allAnswers = new ArrayList<String>();
allAnswers.add(nextQuestion.correctAnswerText);
allAnswers.addAll(nextQuestion.wrongAnswerTexts);

Collections.shuffle(allAnswers);

btn1.setText(allAnswers.get(0));
btn2.setText(allAnswers.get(1));
btn3.setText(allAnswers.get(2));
btn4.setText(allAnswers.get(3));
person Thrakbad    schedule 04.03.2013
comment
Спасибо за советы, чувак! Я новичок в программировании на Java, и у меня действительно нет времени на пошаговое выполнение руководств, но я постараюсь это сделать. Я использовал ваши советы в приложении, и после просмотра некоторых руководств и понимания некоторых концепций теперь приложение работает нормально. Тогда спасибо. - person ; 06.03.2013
comment
Без проблем, рад помочь ;-) - person Thrakbad; 06.03.2013

Я сделал похожее приложение для викторин (King of Math) несколько дней назад.

  1. Подсчитайте правильные ответы
  2. Добавьте правильный ответ в свой список ответов
  3. Подсчитайте ложные ответы, добавьте их в список ответов
  4. Перемешать список
  5. Получите id правильного ответа. Оно находится в диапазоне [0, max_answers)

Если был выбран ответ, вы проверяете, является ли выбранный идентификатор (0, 1, 2, 3) одним из правильных ответов. Если это так, пользователь выбрал правильный, в противном случае - нет.

PS: извините за саморекламу.

person poitroae    schedule 04.03.2013
comment
Ok. Кажется, забавное приложение. Моя идея похожа на вашу, но у меня проблема с доступом к списку ответов. Как я могу изменить ИМЯ списка, к которому будет осуществляться доступ? Это проблема, которую я не могу исправить - person ; 04.03.2013
comment
@SirRoyce Вы не можете управлять именами переменных во время выполнения. По крайней мере, я так понял. Пожалуйста, объясните подробнее, что вы имеете в виду. - person poitroae; 04.03.2013