1

これが私が抱えているばかげた問題なのか、それとも何なのかはわかりませんが、私の人生では解決策がわかりません。20問のクイズプログラムを書いています。プログラムは各質問を行い、ユーザーは 5 つの JRadio ボタンである 5 つの選択肢を持っています。ユーザーが 1 つの回答を選択すると、次の質問に移動したり、前の質問を確認したりできます。私が抱えている問題は、ユーザーが質問に答えて次を押すと、選択された前のラジオボタンが選択されたままになります。つまり、質問 1 の回答 A と次の選択肢 A が質問 2 で選択されるということです。5つのラジオボタンはボタングループにあり、選択をクリアする方法を使用して選択をクリアしました。ユーザーが前のボタンを押して質問を確認し、次のボタンを押してすべての選択を続行した場合を除いて、問題なく動作します。

次と前の実装を以下に追加します。どんなアイデアでも大歓迎です。

// 次へボタンを実装

  nextBT.setPreferredSize(new Dimension(70, 30));
    nextBT.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent evt) {

            int nextQuestion = -1;
            boolean answer = getAnswer(currentQuestion, selectedButton()).equals(getCorrectAnswer(currentQuestion));
            questionHistory[currentHistoryIndex][0] = currentQuestion;
            questionHistory[currentHistoryIndex][1] = selectedButton();

            if (currentHistoryIndex == maxHistoryIndex) {

                //generate next question number to use
                int currentLevel = currentQuestion / 25;
                int nextLevel = currentLevel;
                if (answer) {
                    if (currentLevel < 3) {
                        nextLevel++;
                    }
                } else {
                    if (currentLevel > 0) {
                        nextLevel--;
                    }
                }
                while (true) {
                    int k = 0;
                    Random randomNum = new Random();
                    nextQuestion = nextLevel * 25 + (int) (randomNum.nextInt(25));
                    for (k = 0; k < maxHistoryIndex; k++) {
                        if (questionHistory[k][0] == nextQuestion) {
                            break;
                        }
                    }
                    if (k == maxHistoryIndex) {
                        break;
                    }
                }
                currentHistoryIndex++;
                maxHistoryIndex++;
                if (maxHistoryIndex == 19) {
                    nextBT.setEnabled(false);

                } else {
                    nextBT.setEnabled(true);
                }

            } else {
                // returning to question already on list  
                currentHistoryIndex++;

                nextQuestion = questionHistory[currentHistoryIndex][0];
                int nextAnswer = questionHistory[currentHistoryIndex][1];
                setSelectedButton(nextAnswer);
            }

            if (currentHistoryIndex == 19) {
                nextBT.setEnabled(false);
            }

            currentQuestion = nextQuestion;
            questionHistory[currentHistoryIndex][0] = currentQuestion;
            questionHistory[currentHistoryIndex][1] = selectedButton();

            question.setText(questions[currentQuestion * 7]);
            rb1.setText(questions[(currentQuestion * 7) + 1]);
            rb2.setText(questions[(currentQuestion * 7) + 2]);
            rb3.setText(questions[(currentQuestion * 7) + 3]);
            rb4.setText(questions[(currentQuestion * 7) + 4]);
            rb5.setText(questions[(currentQuestion * 7) + 5]);

            previousBT.setEnabled(true);

            //setSelectedButton(questionHistory[currentHistoryIndex][1]);
            questionCountLB.setText("Question " + (currentHistoryIndex + 1) + " of 20");


            //if(bg.isSelected()){



            bg.clearSelection();
        }

    }); 

// 前のボタンを実装

    previousBT.setPreferredSize(new Dimension(120, 30));
    previousBT.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent evt) {

            nextBT.setEnabled(true);
            questionHistory[currentHistoryIndex][1] = selectedButton();

            currentHistoryIndex--;
            if (currentHistoryIndex == 0) {
                previousBT.setEnabled(false);
            }
            if (currentHistoryIndex > 0) {
                previousBT.setEnabled(true);
            }
            int nextQuestion = questionHistory[currentHistoryIndex][0];
            currentQuestion = nextQuestion;
            question.setText(questions[currentQuestion * 7]);
            rb1.setText(questions[(currentQuestion * 7) + 1]);
            rb2.setText(questions[(currentQuestion * 7) + 2]);
            rb3.setText(questions[(currentQuestion * 7) + 3]);
            rb4.setText(questions[(currentQuestion * 7) + 4]);
            rb5.setText(questions[(currentQuestion * 7) + 5]);

            setSelectedButton(questionHistory[currentHistoryIndex][1]);
            questionCountLB.setText("Question " + (currentHistoryIndex + 1) + " of 20");
        }
    });
4

1 に答える 1

2

あなたが説明したように、ユーザーが次のボタンを押すと、ラジオボタンがクリアされます。ユーザーの選択を保存しないと、もちろんユーザーは以前の回答を確認できません。

したがって、ユーザーの選択を保存するには、をキーとして、値としてHashMap使用するを作成する必要があると思います。ユーザーが次のボタンを押すたびに、ユーザーの選択を質問の ID とともにハッシュマップに入れるだけです。ユーザーが前のボタンを押すと、前の質問のインデックスを取得し、ハッシュマップから回答を取得して、対応するラジオ ボタンを選択します。questionIndexanswer

于 2012-12-07T19:03:37.410 に答える