我正在尝试将一个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);
}
答案 0 :(得分:1)
我发现了问题,必须在组件初始化时将itemListener添加到jCheckBoxes中。