Java arrayList添加对象n次

时间:2018-05-14 14:21:26

标签: java arraylist

我正在尝试将一个java测验链接到一个sqlite数据库,从中获取信息(问题和答案)。 每个测验都有n个问题。 一个问题有4个选项。 一个问题可能有多个真正的问题。 所以我的数据库表是: 测验(id_quiz,quiz_name) 问题(id_question,问题,#id_quiz) 答案(id_answer,statut,answer,#id_question)

所以我创建了第一个框架来选择我们要传递的测验,它正在使用一个根据所选测验调用新框架的函数。

我的问题是当我将所选答案与必须选择的真实答案进行比较时。 这是我的代码:

public boolean compare(List<Integer> trueAnswer, List<Integer> selected){

        if (trueAnswer.equals(selected)){
            return true;
        } else {
            return false;
        }

    }

第一步是在jLabel中提出问题,以及该问题的答案:

public List<Answer> showQuestion(int index){
in = fillQuestion(idQ).get(index).getIdQuestion();
jQuestion.setText(fillQuestion(idQ).get(index).getQuestion());
try {
        con = DriverManager.getConnection("jdbc:sqlite:myflightdb.db", "", "");
        String sql2 = ("select r.id_answer ,r.answer,  r.statut from question q, answer r where q.id_question = ? and r.id_question = q.id_question ;");
        PreparedStatement psmt2;
        psmt2 = con.prepareStatement(sql2);
        psmt2.setInt(1, in);
        List<Answer> listRep = new ArrayList<Answer>();
rs2 = psmt2.executeQuery();
        while(rs2.next()){
            int idR = rs2.getInt("id_answer");
            String rep = rs2.getString("answer");
            String statut = rs2.getString("statut");
            Reponse r = new Reponse(idR, rep, statut);
            listRep.add(r);
        }
return listRep;
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        }
        return null;
        }

函数getTrueAnswer是为了获得问题的真实答案列表:

public List<Integer> getTrueAnswer(int index){
    int idquestion;
    idquestion = fillQuestion(idQ).get(index).getIdQuestion();
    List<Integer> rep = new ArrayList<Integer>();
    try {
    con = DriverManager.getConnection("jdbc:sqlite:/Users/gate11/Desktop/MyFlight/myflightdb.db", "", "");
    String sql = "select r.id_reponse from Reponse r where r.id_question = ? and r.statut like 'true';";
    PreparedStatement psmt = con.prepareStatement(sql);
    psmt = con.prepareStatement(sql);
    psmt.setInt(1, idquestion);
    rs = psmt.executeQuery();
    while (rs.next()){
        int idTrueAnswer= rs.getInt("id_reponse");
        rep.add(idTrueAnswer);
    }
    //JOptionPane.showMessageDialog(null, Arrays.toString(rep.toArray()), "Selected IDs", JOptionPane.INFORMATION_MESSAGE);

    return rep;
    } catch (Exception e){
        System.out.println(""+e.getMessage());
    }
    return null;
}

接下来的按钮必须将选中的jCheckBoxes与真实问题进行比较,如果相同,则标记必须为positif(因此我可以将该点添加到结果中)或如果用户未选择真实的则添加0

问题是第一次,它正在工作(我让JOptionPanes看到了列表)所以如果我选择第一个问题,我选择的是[1]而真正的答案是[2] 但在第二个问题中,如果我选择1,我的列表是[1,1],第三个[1,1,1],第四个[1,1,1,1]等...... 我没有任何循环我找不到问题。 如果有任何想法请不要犹豫。 P.S:我做了4个复选框,因为当我尝试将它添加到for循环中时:

for (Answer a:listRep){
JcheckBox mycheck = new JcheckBox();
mycheck.setText(a.getQuestion());
mypanel.add(mycheck);
}

1 个答案:

答案 0 :(得分:1)

我发现了问题,必须在组件初始化时将itemListener添加到jCheckBoxes中。