Пытаясь получить правильный счет для моей игры викторины - PullRequest
0 голосов
/ 29 февраля 2020

У меня есть задание, чтобы выполнить это задание, это простая программа викторины, в которой пользователь должен ответить на 10 вопросов из базы данных (но в настоящее время у меня есть 3 вопроса, отображающих все в одном кадре, потому что я использовал jscrollpane ..). В конце викторины я хотел бы отобразить счет пользователя, но вместо этого «3 из 3» отображает «6 из 3» .. и я действительно стараюсь изо всех сил в течение почти 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 Ответ

1 голос
/ 29 февраля 2020

Когда вы читаете из базы данных, вы добавляете результат в список и перебираете этот список (для каждого добавления). Итак, сначала вы читаете выбор 1, l oop над списком (содержащий 1j, затем вы добавляете 2, l oop над списком, содержащим 1 и 2, затем вы добавляете 3, и l oop над списком, содержащим 1 , 2 и 3. Таким образом, вариант 1 будет оцениваться 3 раза, 2 2 раза и 3 раза. Всего 6 баллов.

Однако есть еще одна проблема.

Вы сравниваете каждый вариант со всеми ответами. Это означает, что оценка будет увеличиваться, если она соответствует нескольким ответам.

Скажем, у меня есть ответы a, b, b, и я выбираю b, a, a. В вашем выборе l oop 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();
}
...