Java 试图为我的智力竞赛获得正确的分数

Java 试图为我的智力竞赛获得正确的分数,java,netbeans-8.2,Java,Netbeans 8.2,我有一个作业要做,这个作业是一个简单的测验程序,用户需要回答数据库中的10个问题(但我目前有3个问题显示在一个框架中,因为我使用了jscrollpane…)。在测验结束时,我想显示用户的分数,但如果显示“3分3分”,则显示“3分6分”。我真的在近3天内尽了最大努力来找出原因 有人能给我这个问题的解决办法吗 我正在使用NetBeans public class Quiz extends javax.swing.JFrame { ArrayList<Question> list

我有一个作业要做,这个作业是一个简单的测验程序,用户需要回答数据库中的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() + "!"));
     }
公共类测验扩展了javax.swing.JFrame{
ArrayList=新建ArrayList();
字符串答案=”;
字符串answer1=“”;
字符串answer2=“”;
整数百分比;
智力得分=0;
字符串正确;
试一试{
结果集rs=stmt.executeQuery(“从问题中选择*);
while(rs.next()){
问题x=新问题(rs.getInt(“ExamCode”)、rs.getString(“类别”),
rs.getString(“问题”)、rs.getString(“ChoiceA”)、rs.getString(“ChoiceB”),
rs.getString(“ChoiceC”)、rs.getString(“ChoiceD”)、rs.getString(“应答”);
增加(x);
对于(int i=0;i
当您从数据库中读取数据时,您会将结果添加到一个列表中,并在该列表上迭代(对于每个添加)。因此,首先您要阅读选项1,在列表上循环(包含1j,然后添加2,在包含1和2的列表上循环,然后添加3,并在包含1、2和3的列表上循环。因此,选项1将获得3分、2分和3分。总共6分

然而,还有另一个问题

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

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

你只需将选择与该问题的答案进行比较。最简单的方法可能是将答案放在一个列表中,而不是单独的变量中

由于您的代码未显示如何回答,因此有一个通用指南是可行的:

// 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();
}
//收集所有答案
结果集rs=stmt.executeQuery(“从问题中选择*);
while(rs.next()){
问题x=新问题(rs.getInt(“ExamCode”)、rs.getString(“类别”),
rs.getString(“问题”)、rs.getString(“ChoiceA”)、rs.getString(“ChoiceB”),
rs.getString(“ChoiceC”)、rs.getString(“ChoiceD”)、rs.getString(“应答”);
增加(x);
}
//不知道你是如何收集答案的。。。
列表答案=新建ArrayList();
//收集答案。。。
答案。添加(“答案1”);
答案。添加(“答案2”);
答案。添加(“答案3”);
对于(int i=0;i
在哪里初始化变量“answer”、“answer1”和“answer2”。特别是如果在for循环中,其中任何一个都相等,那么每次迭代你的分数都可以增加一个以上。谢谢你的回答,正如你所猜测的,我是一个初学者。你能给我一个你所说的列表的例子吗?因为我试着像你所说的那样把答案放在列表中,但代码是我的radiobutton c的一部分ontains错误“不兼容类型:字符串无法转换为ArrayList”。我不确定你所说的是否与我所做的相符。请帮助我。如果这很烦人,我很抱歉。我真的很感谢你,先生@罗杰,但我尝试了你展示的代码,但它不包括任何正确答案。我希望你有很长的耐心。你没有展示你如何收集答案(并将其放入列表)。也许您应该尝试使用调试器逐步完成您的程序?列出答案=新ArrayList();问题q1=新问题(45678,“轻松”,“谁是我?”,“妈妈”,“我”,“米”,“莫”,“我”);问题q2=新问题(5678,“轻松”,“你是谁?”,“y”,“o”,“u”,“你”,“你”);问题q3=新问题(6789,“轻松”“她是谁?”、“h”、“e”、“r”、“她”、“她”);答案。添加(q1);答案。添加(q2);答案。添加(q3);//先生,这就是“收集答案”的意思吗?不,我假设用户以某种方式输入/选择答案,该铃声应该被收集到答案列表中。然后比较
list.get(I).getAnswer().equalsIgnoreCase(answers.get(I))
(因此,您可以将问题的已知正确答案与用户输入进行比较)。