2015-12-27 3 views
-2

Я пытаюсь сделать программу викторины с несколькими вариантами. Класс QuizQuestion работает с объектами Вопроса и содержит методы для установки текста на метке вопроса и ответных кнопках в классе GUI каждый раз, когда пользователь нажимает кнопку «Следующий вопрос».Как добавить элементы в ArrayList объектов вне метода

Моя проблема в том, что после того, как последний объект Question в ArrayList отображается, он начинается с первого элемента снова, а не заканчивается викторину. Я понимаю, что причиной является метод getCurrentQuestion(), в котором я добавляю объекты Question в ArrayList, так что каждый раз, когда метод получает вызов, одни и те же элементы снова добавляются в ArrayList.

Как я могу решить эту проблему и по-прежнему получать доступ к каждой переменной Вопроса по индексу ArrayList в методах getCurrentQuestion() и getCurrentAnswers()? Есть ли способ добавить объекты Question в ArrayList за пределами метода? Любая помощь будет оценена по достоинству.

Это пример того, что я пытаюсь сделать:

Класс QuizQuestion:

import java.util.*; 

public class QuizQuestion { 


public int currentQuestionIndex = 0; 
public String userAns; 
public int correctAnswers; 


public ArrayList<Question> questionBank = new ArrayList<Question>(); 

Question question1 = new Question("What is 4 + 8", Arrays.asList("11", "14", "12"), "12"); 
Question question2 = new Question("What is 24 - 7", Arrays.asList("17", "13", "16"), "17"); 
Question question3 = new Question("What is 7 * 9", Arrays.asList("72", "63", "56"), "63"); 




public String getCurrentQuestion() { 
    String question; 
    questionBank.add(question1); 
    questionBank.add(question2); 
    questionBank.add(question3); 
    question = questionBank.get(currentQuestionIndex).getQuestion(); 

    return question; 
} 


public List<String> getCurrentAnswers() { 
    List <String> answrs; 

    answrs = questionBank.get(currentQuestionIndex).getAnswers(); 
    return answrs; 
} 



} 

Тогда в моем классе GUI у меня есть метод, который вызывается каждый раз, когда пользователь нажимает кнопку кнопка «Далее»:

QuizQuestion quiz = new QuizQuestion(); 


public void nextQuestion() { 

    quiz.currentQuestionIndex = quiz.currentQuestionIndex + 1; 
     label.setText(quiz.getCurrentQuestion()); 
     setButtons(quiz.currentQuestionIndex); //sets the text for possible answers on Radiobuttons. 



    } 
+2

Пожалуйста, отредактируйте ваш вопрос, вы не ожидаете, что мы все это прочитаем или, не так ли? – QuakeCore

+0

Если вы хотите добавить к arraylist вне метода, вы можете сделать его общедоступным для класса или просто сделать способ, который будет добавлен в список –

ответ

0

Моя проблема заключается в том, что после того, как последний объект Вопрос в ArrayList является displaye d он начинается с первого элемента снова, а не заканчивается викториной . Я понимаю, что причиной этого является метод getCurrentQuestion() где я добавить объекты Вопрос в ArrayList

Это вряд ли имело смысл. Возвращенный вопрос всегда будет на позиции currentQuestionIndex. Однако в коде, который вы отправили, он никогда не увеличивается, поэтому всегда должно быть 0. Похоже, вы забыли опубликовать некоторые важные части своей проблемы ...

Тем не менее, если ваша цель - просто получить их последовательно в в том же порядке они добавлены, вы можете избавиться от currentQuestionIndex с помощью LinkedList и просто позвонить poll, который будет извлекать и удалять первый элемент списка, таким образом, каждый вызов будет возвращать следующий.

Вы могли бы избавиться от этого метода:

public String getCurrentQuestion() { 
    String question; 
    questionBank.add(question1); 
    questionBank.add(question2); 
    questionBank.add(question3); 
    question = questionBank.get(currentQuestionIndex).getQuestion(); 

    return question; 
} 

изменить его к чему-то, что больше смысла (и называть его только один раз, то есть в конструкторе):

public void addQuestions() { 
    questionBank.add(question1); 
    questionBank.add(question2); 
    questionBank.add(question3); 
} 

и просто использовать questionBank.poll();, чтобы получить следующий вопрос. Вызов poll вернет null, когда список пуст, чтобы вы могли легко справиться, когда находитесь в конце своего списка.

+0

Спасибо за ваш ответ! У меня есть метод в классе GUI, который вызывается каждый раз, когда пользователь нажимает кнопку «Далее», которую я удалил, так как мой пост был слишком длинным.Метод увеличивает значение currentQuestionIndex и вызывает метод getCurrentQuestion() для установки текста на меток и метода getCurrentAnswers() для отображения трех возможных ответов на Radiobuttons. – Wolfgang

Смежные вопросы