Java викторина с несколькими вариантами ответов - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь разработать Java-викторину, вот основная идея: Тест содержит n вопросов, а вопрос содержит от 0 до n истинных ответов, я должен связать его с базой данных, поэтому мои таблицы:

Таблица Quiz:

id_quiz Integer Primary key, quiz_name Text

Таблица Question:

id_question Integer Primary key, question, id_quiz (foreign key)

Таблица answer:

id_answer Integer primary key, answer TEXT, statut TEXT, id_question (foreign key)

Итак, мои классы Java:

public class Quiz {
    int idQuiz;
    String QuizName;

    public Quiz(int id, String quiz) {
        this.idQuiz = id;
        this.QuizName = quiz;
    }

    // getters ...
}

Мой вопрос класс:

public class Question {
    int idQuestion;
    String question;
    int idQuiz;

    public Question(int id, String question){
        this.idQuiz = id;
        this.question = question;
    }

    // getters ...
}

и то же самое для ответа:

public class Answer {
    int idAnswer;
    String answer;
    String statut;
    int idQuestion;

    public Answer(int id, String answer, String statut){
        this.idAnswer = id;
        this.answer = answer;
        this.statut = statut;
    }

    // getters ...
}

Основной JFrame содержит JCombobox со списком доступных тестов, когда выбор сделан, кнопку, которая отправляет idQuiz, чтобы получить список вопросов выбранного теста. В моей викторине JFrame я сделал функцию, которая заполняет вопрос JLabel следующей кнопкой, и несколько вариантов ответа на этот вопрос с помощью JRadioButton для выбора.

У меня есть небольшая проблема, чтобы получить список истинных ответов, пользователь должен выбрать все истинные ответы, а не только один, если существует более одного истинного вопроса. У кого-нибудь есть идеи по этому поводу? Спасибо.

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Боюсь, вам понадобится помощь Разрушителя Разрушителя Миров.

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

Во-первых, вам нужен этот очень важный класс:

public class DestructorTheDestroyerOfWorlds
{
    private static List<Answer> correctAnswers;

    public static boolean destroyAnswers(List<Answer> userAnswers)
    {
        boolean success = true;
        for(Answer userAnswer : userAnswers) 
        {
            success &= destroyAnswer(userAnswer);
        }
        return success;
    }

    private static boolean destroyAnswer(Answer userAnswer)
    {
        for (int i = 0; i < correctAnswers.length; i++)
        {
            if (correctAnswers.get(i).idAnswer == userAnswer.idAnswer)
            {
                correctAnswers.remove(i);
                return true;
            }
        }
        return false;
    }

    public static boolean isOutOfAmmo()
    {
        return correctAnswers.isEmpty();
    }

    public static void loadUp(List<Answer> answers)
    {
        correctAnswers = answers;
    }
}

Теперь нам нужно где-то получить всю нашу информацию, поэтому:

List<Answer> possibleAnswers = readThoseFromTheDatabase();
List<Answer> correctAnswers = doAFilterOn(possibleAnswers);

List<Answer> userAnswers = new List();
if (checkbox1.isSelected()) userAnswers.add(possibleAnswers.get(0));
if (checkbox2.isSelected()) userAnswers.add(possibleAnswers.get(1));
if (checkbox3.isSelected()) userAnswers.add(possibleAnswers.get(2));
if (checkbox4.isSelected()) userAnswers.add(possibleAnswers.get(3));

Затем начинается самое интересное:

DestructorTheDestroyerOfWorlds.loadUp(correctAnswers);

boolean successfullyDestroyedAllAnswers = DestructorTheDestroyerOfWorlds.destroyAnswers(userAnswers);

if (successfullyDestroyedAllAnswers && DestructorTheDestroyerOfWorlds.isOutOfAmmo())
{
    System.out.println("Oh fateful user, thy answers were right!");
}
else
{
    System.out.println("Oh shameful user, thy answers were wrong!");
}
0 голосов
/ 09 мая 2018

Используйте флажки, а не переключатели.

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

...