试图为我的问答游戏获得正确的分数
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();
}
我有一个任务要做这个任务是一个简单的测验程序,用户需要回答数据库中的 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();
}