有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

列出答案中有多种选择的Java小测验

我正在尝试开发一个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) 个答案

  1. # 1 楼答案

    恐怕你需要毁灭者,世界的毁灭者的帮助

    他将一个接一个地攻击用户标记为正确的答案,直到决定用户的命运

    首先,你需要这个非常重要的课程:

    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!");
    }
    
  2. # 2 楼答案

    使用复选框,而不是单选按钮

    单选按钮只允许单选。复选框是一个控件,您可以在其中选择是否为每个选项选中复选框。请注意,这还包括“无选中答案”选项(虽然可以在开始时不选择单选按钮,但一旦用户选择了any单选按钮,他们将无法取消选择)