【问题标题】:Trying to get the right score for my quiz game试图为我的问答游戏获得正确的分数
【发布时间】:2020-06-13 04:42:16
【问题描述】:

我有一个作业要做,这个作业是一个简单的测验程序,用户需要回答数据库中的 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() + "!"));
     }

【问题讨论】:

  • 你在哪里初始化变量“answer”、“answer1”和“answer2”。特别是如果在你的 for 循环中任何一个是相等的,那么你可以在每次迭代中增加一个以上的分数。

标签: java netbeans-8.2


【解决方案1】:

当您从数据库中读取结果时,您会将结果添加到列表中并迭代该列表(每次添加)。所以首先你读选项 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();
}

【讨论】:

  • 感谢您的回答,正如您所猜想的那样,我是初学者.. 请给我一个您所说的列表示例,因为我试图将答案放在列表中您所说的,但是我的单选按钮中的代码部分包含错误“不兼容的类型:字符串无法转换为 ArrayList”。我不确定你所说的是否与我所做的相匹配,请帮助我。如果这很烦人,我很抱歉。
  • 我非常感谢@Roger 先生,但我尝试了您显示的代码,但它没有计算任何正确答案.. 我希望您有耐心。
  • 您尚未展示如何收集答案(并将它们放入列表中)。或许您应该尝试使用调试器逐步执行您的程序?
  • List 答案 = new ArrayList(); Question q1 = new Question(45678, "Easy", "Who isme?", "ma", "me", "mi", "mo", "me"); Question q2 = new Question(5678, "Easy", "Who is you?", "y", "o", "u", "you", "you"); Question q3 = new Question(6789, "Easy", "Who is her?", "h", "e", "r", "her", "her");答案.add(q1);答案.add(q2);答案.add(q3); //这就是'收集答案'的意思吗?
  • 不,我假设用户以某种方式输入/选择了一个答案,该戒指应该收集在答案列表中。然后您比较list.get(i).getAnswer().equalsIgnoreCase(answers.get(i))(因此您将问题的已知正确答案与用户输入进行比较)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-04
  • 1970-01-01
  • 2021-02-27
  • 2022-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多