簡體   English   中英

試圖為我的問答游戲獲得正確的分數

[英]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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM