试图为我的问答游戏获得正确的分数

Trying to get the right score for my quiz game

我有一个任务要做这个任务是一个简单的测验程序,用户需要回答数据库中的 10 个问题(但我目前有 3 个问题显示在一个框架中,因为我使用了 jscrollpane..) .在测验结束时,我想显示用户的分数,而不是显示“3 分中的 3”,它显示“3 分中的 6”。我真的尽力了将近 3 天来计算为什么。

谁能给我这个问题的解决方案?

我正在使用 NetBeans。

public class Quiz extends javax.swing.JFrame {

    ArrayList<Question> list = new ArrayList<>();
    String answer = "";
    String answer1 = "";
    String answer2 = "";
    int percent;
    int score = 0;
    String correct;






 try {

            ResultSet rs = stmt.executeQuery("Select * from Questions");
            while (rs.next()) {
                Question x = new Question(rs.getInt("ExamCode"), rs.getString("Category"),
                        rs.getString("Question"), rs.getString("ChoiceA"), rs.getString("ChoiceB"),
                        rs.getString("ChoiceC"), rs.getString("ChoiceD"), rs.getString("Answer"));
                list.add(x);

                for (int i = 0; i < list.size(); i++) {
                     correct = list.get(i).getAnswer();

                    if (correct.equalsIgnoreCase(answer)) {
                          score++;
                        System.out.print(score);
                    }

                    if (correct.equalsIgnoreCase(answer1)) {
                        score++;
                        System.out.print(score);
                    }

                    if (correct.equalsIgnoreCase(answer2)) {
                        score++;
                        System.out.print(score);
                    }
                }

                new Result(score, list).setVisible(true);         
                this.dispose();
            }
        } catch (SQLException ex) {
            Logger.getLogger(Category.class.getName()).log(Level.SEVERE, null, ex);
         }


           //code in my resultform


   public Result() {
          initComponents();
    }
     public Result(int score, ArrayList<Question> list) {
        initComponents();
           labelResult.setText(String.valueOf(score + " out of " + list.size() + "!"));
     }

当您从数据库中读取时,您将结果添加到列表中并迭代该列表(对于每次添加)。因此,首先您阅读选项 1,遍历列表(包含 1j,然后添加 2,遍历包含 1 和 2 的列表,然后添加 3,然后遍历包含 1、2 和 3 的列表。因此选择 1 将被得分3次,2次2次,3次1次。共6次得分。

但是,还有一个问题。

您将每个选项与所有答案进行比较。这意味着如果它匹配多个答案,分数将会增加。

假设我有答案 a、b、b,我选择 b、a、a。在您的循环中,选择 1 将获得 2 分(匹配答案 2 和 3),选择 2 和 3 各获得一分(匹配答案 1)。

您只能将选项与该问题的答案进行比较。最简单的可能是将答案放在列表中而不是单独的变量中。

由于您的代码没有显示如何 answer answer1 answer2 是一种可能的一般指导:

// Collect all answers
ResultSet rs = stmt.executeQuery("Select * from Questions");
while (rs.next()) {
    Question x = new Question(rs.getInt("ExamCode"), rs.getString("Category"),
    rs.getString("Question"), rs.getString("ChoiceA"), rs.getString("ChoiceB"),
    rs.getString("ChoiceC"), rs.getString("ChoiceD"), rs.getString("Answer"));
    list.add(x);
}

// Not sure how you collect answers...
List<String> answers = new ArrayList<>();
// Collect answers ...
answers.add("answer 1");
answers.add("answer 2");
answers.add("answer 3");
for (int i = 0; i < list.size(); i++) {
    correct = list.get(i).getAnswer();

    if (correct.equalsIgnoreCase(answers.get(i))) {
        score++;
        System.out.print(score);
    }
}

// Show result
new Result(score, list).setVisible(true);         
    this.dispose();
}