【问题标题】:How to ask 10 random math questions for a math quiz program for kids?如何为儿童数学测验计划提出 10 个随机数学问题?
【发布时间】:2020-06-22 03:31:15
【问题描述】:

我正在尝试为一个提出 10 个问题的学校项目为孩子创建一个数学程序。我无法找出在我的代码中应用循环的方式和位置。我曾尝试在我的 enterbtnListener 和 startBtnListener 中使用 for 循环,但不幸的是没有一个工作。这是程序的输出。 program_OUTPUT

这里是startBtnListener的代码

class startBtnListener implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        if (add.isSelected()) {
            ansBtn.setEnabled(true);
            input.setEditable(true);
            result = num1 + num2;
            question = ("What is " + num1 + " + " + num2 + " = ");

            questionTOP.setVisible(false);
            questionHERE.setText(question);
            questionHERE.setVisible(true);
            input.setVisible(true);

            add.setEnabled(false); //disables buttons until END button is clicked
            subtract.setEnabled(false);
            multiply.setEnabled(false);
            beginner.setEnabled(false);
            intermediate.setEnabled(false);
            advanced.setEnabled(false);


        } else if (subtract.isSelected()) {
            ansBtn.setEnabled(true);
            input.setEditable(true);
            result = num1 - num2;
            question = ("What is " + num1 + " - " + num2 + " = ");

            questionTOP.setVisible(false);
            questionHERE.setText(question);
            questionHERE.setVisible(true);
            input.setVisible(true);

            add.setEnabled(false); //disables buttons until END button is clicked
            subtract.setEnabled(false);
            multiply.setEnabled(false);
            beginner.setEnabled(false);
            intermediate.setEnabled(false);
            advanced.setEnabled(false);

        } else if (multiply.isSelected()) {
            ansBtn.setEnabled(true);
            input.setEditable(true);
            result = num1 * num2;
            question = ("What is " + num1 + " * " + num2 + " = ");

            questionTOP.setVisible(false);
            questionHERE.setText(question);
            questionHERE.setVisible(true);
            input.setVisible(true);

            add.setEnabled(false); //disables buttons until END button is clicked
            subtract.setEnabled(false);
            multiply.setEnabled(false);
            beginner.setEnabled(false);
            intermediate.setEnabled(false);
            advanced.setEnabled(false);

        } else {
            ansBtn.setEnabled(false);
            input.setEditable(false);
            JOptionPane.showMessageDialog(null, "You need to choose below!", "PLEASE NOTE", JOptionPane.WARNING_MESSAGE);
        }

    }
}

这里是enterBtnListener的代码

class enterListener implements KeyListener {
    public void keyPressed(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_ENTER) {
            if (beginner.isSelected()) {
                num1 = (int) (Math.random() * 11);
                num2 = (int) (Math.random() * 11);
            } else if (intermediate.isSelected()) {
                num1 = (int) (Math.random() * 9 + 11);
                num2 = (int) (Math.random() * 9 + 11);
            } else if (advanced.isSelected()) {
                num1 = (int) (Math.random() * 17 + 13);
                num2 = (int) (Math.random() * 17 + 13);
            }

            // checking answer is correct or wrong
            while (true) {
                double doubleOfInput = Double.parseDouble(input.getText()); // getting string to double
                if (doubleOfInput == result) {
                    JOptionPane.showMessageDialog(null, "correct");
                    input.setText(" "); // clearing input after user entered answer
                    break;
                } else {
                    JOptionPane.showMessageDialog(null, "Wrong, Try Again!");
                    input.setText(" ");
                }
            }

            //generating formula
            if (add.isSelected()) {
                result = num1 + num2;
                question = ("What is " + num1 + " + " + num2 + " = ");
            } else if (subtract.isSelected()) {
                result = num1 - num2;
                question = ("What is " + num1 + " - " + num2 + " = ");
            } else if (multiply.isSelected()) {
                result = num1 * num2;
                question = ("What is " + num1 + " * " + num2 + " = ");
            } else {
                result = num1 + num2;
                question = ("What is " + num1 + " + " + num2 + " = ");
            }

            questionHERE.setText(question);//setting new question
        }

    }

如果有人可以帮助我,我将不胜感激。谢谢。

【问题讨论】:

  • enterBtnListener 是否用于应答按钮?
  • enterBtn Listener 用于按下“Enter”键,我还有一个 answerBtnListener 用于应答按钮。然而,两个侦听器具有相同的代码,因为它们在程序中的功能应该相同

标签: java loops for-loop


【解决方案1】:

看起来不错!我的意见是有一个设计在哪里

  1. start button -> 听众将发起这个数学测验。

  2. next button -> 侦听器将有一个迭代类(实例级别)变量和 你可以拥有它,直到它达到你想要的数量(10 说)

  3. End button -> 听众将终止此数学测验,并且可能应该发布 结果。可能会终止并在单独的方法中显示结果逻辑,并且 在这里打电话。 (方法名:terminateQuiz(say))

下一个按钮,其监听器大致如下,

class nextBtnListener implements ActionListener {
    public void actionPerformed(ActionEvent e) {
       //count++;
       //when count reaches 10 (say) it should call terminateQuiz
    }
}

其他一切看起来都很好..

注意:Next 按钮的原因比 Enter 键的外观和感觉更好。

//学习愉快!

【讨论】:

  • 感谢您的回复,我尝试了这个方法,发现它的功能与我的回答按钮相同,在用户输入正确答案后显示下一个问题。我的问题是我只想在程序中提出 10 个问题,但我现在的情况是,它会无限地询问,直到用户点击 End 按钮。
  • 我不完全了解您的课程,我建议下一个 btn,因为他们甚至可以修改答案并再次单击答案,但这不被视为新问题。新问题可以由单独的侦听器控制,但是您是否尝试过在类级别引入 var 并在您的 answerBtn 侦听器中对其进行迭代,以便您可以控制否。问了多少次?
【解决方案2】:

我假设您的 enterListener 类是处理 gui 的 ANSWER 按钮的类,流程如下所示:

StartButton - 将初始化测验并显示初始问题 答案按钮 - 将接受用户输入的答案并显示下一个按钮。

所以你的循环在 enterListener

中可能如下所示
class enterListener implements KeyListener {
public void keyPressed(KeyEvent e) {
    if (e.getKeyCode() == KeyEvent.VK_ENTER) {
        if (beginner.isSelected()) {
            num1 = (int) (Math.random() * 11);
            num2 = (int) (Math.random() * 11);
        } else if (intermediate.isSelected()) {
            num1 = (int) (Math.random() * 9 + 11);
            num2 = (int) (Math.random() * 9 + 11);
        } else if (advanced.isSelected()) {
            num1 = (int) (Math.random() * 17 + 13);
            num2 = (int) (Math.random() * 17 + 13);
        }
        for(int i = 1 ; i < 10 ;i++){ //start your loop with 1 till 9 showing 9 questions as first one is already start with startbutton
            // checking answer is correct or wrong
            while (true) {
                double doubleOfInput = Double.parseDouble(input.getText()); // getting string to double
                if (doubleOfInput == result) {
                    JOptionPane.showMessageDialog(null, "correct");
                    input.setText(" "); // clearing input after user entered answer
                    break;
                } else {
                    JOptionPane.showMessageDialog(null, "Wrong, Try Again!");
                    input.setText(" ");
                }
            }

            //generating formula
            if (add.isSelected()) {
                result = num1 + num2;
                question = ("What is " + num1 + " + " + num2 + " = ");
            } else if (subtract.isSelected()) {
                result = num1 - num2;
                question = ("What is " + num1 + " - " + num2 + " = ");
            } else if (multiply.isSelected()) {
                result = num1 * num2;
                question = ("What is " + num1 + " * " + num2 + " = ");
            } else {
                result = num1 + num2;
                question = ("What is " + num1 + " + " + num2 + " = ");
            }

            questionHERE.setText(question);//setting new question
        }
    }

}

【讨论】:

  • 您好,感谢您的回复,我已经尝试过您的建议,但它一直提示许多错误,并且除非用户单击“结束”按钮,否则问题仍然会不断显示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-08
  • 1970-01-01
  • 1970-01-01
  • 2018-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多