首页 > 其他分享 >9月30日记录

9月30日记录

时间:2024-09-30 22:23:09浏览次数:7  
标签:记录 int 30 Question private answer new public

完成了一个能够列出30道四则运算的java程序,
题目要求:乘法不超过四位数,减法大于零,除法结果为整数;
实现可视化界面,并且能够计算得分与计时;

点击查看代码
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

public class MathQuiz2 extends JFrame {
    private static final int NUM_QUESTIONS = 30;
    private static final int TIME_LIMIT = 60; // 60 seconds
    private JTextArea questionArea;
    private JTextField answerField;
    private JButton submitButton;
    private JLabel timerLabel;
    private int currentQuestionIndex = 0;
    private int score = 0;
    private Question[] questions;
    private Timer timer;

    public MathQuiz2() {
        setTitle("Math Quiz");
        setSize(400, 300);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLayout(new BorderLayout());

        questionArea = new JTextArea();
        questionArea.setEditable(false);
        questionArea.setLineWrap(true);
        questionArea.setWrapStyleWord(true);
        add(new JScrollPane(questionArea), BorderLayout.CENTER);

        JPanel inputPanel = new JPanel();
        answerField = new JTextField(10);
        submitButton = new JButton("提交答案");
        timerLabel = new JLabel("剩余时间: " + TIME_LIMIT);
        inputPanel.add(answerField);
        inputPanel.add(submitButton);
        inputPanel.add(timerLabel);
        add(inputPanel, BorderLayout.SOUTH);

        submitButton.addActionListener(new SubmitAnswerListener());

        generateQuestions();
        displayNextQuestion();
        startTimer();

        setVisible(true);
    }

    private void generateQuestions() {
        questions = new Question[NUM_QUESTIONS];
        Random random = new Random();

        for (int i = 0; i < NUM_QUESTIONS; i++) {
            int a = random.nextInt(100); // 0-99
            int b = random.nextInt(100); // 0-99
            int operation = random.nextInt(4); // 0:加, 1:减, 2:乘, 3:除

            switch (operation) {
                case 0: // 加法
                    questions[i] = new Question(a + " + " + b, a + b);
                    break;
                case 1: // 减法
                    if (a >= b) {
                        questions[i] = new Question(a + " - " + b, a - b);
                    } else {
                        i--; // 重新生成题目
                    }
                    break;
                case 2: // 乘法
                    int c = random.nextInt(100); // 0-99
                    if (a * b <= 9999) {
                        questions[i] = new Question(a + " * " + b, a * b);
                    } else {
                        i--; // 重新生成题目
                    }
                    break;
                case 3: // 除法
                    if (b != 0 && a % b == 0) {
                        questions[i] = new Question(a + " / " + b, a / b);
                    } else {
                        i--; // 重新生成题目
                    }
                    break;
            }
        }
    }

    private void displayNextQuestion() {
        if (currentQuestionIndex < NUM_QUESTIONS) {
            questionArea.setText(questions[currentQuestionIndex].getQuestion());
            answerField.setText("");
            answerField.requestFocus();
        } else {
            endQuiz();
        }
    }

    private void startTimer() {
        timer = new Timer(1000, new ActionListener() {
            private int timeLeft = TIME_LIMIT;

            @Override
            public void actionPerformed(ActionEvent e) {
                if (timeLeft > 0) {
                    timeLeft--;
                    timerLabel.setText("剩余时间: " + timeLeft);
                } else {
                    ((Timer) e.getSource()).stop();
                    endQuiz();
                }
            }
        });
        timer.start();
    }

    private void endQuiz() {
        timer.stop();
        JOptionPane.showMessageDialog(this, "测验结束!您的得分是: " + score + "/" + NUM_QUESTIONS);
        System.exit(0);
    }

    private class SubmitAnswerListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            try {
                int answer = Integer.parseInt(answerField.getText());
                if (answer == questions[currentQuestionIndex].getAnswer()) {
                    score++;
                }
                currentQuestionIndex++;
                displayNextQuestion();
            } catch (NumberFormatException ex) {
                JOptionPane.showMessageDialog(MathQuiz2.this, "请输入有效的数字!");
            }
        }
    }

    private static class Question {
        private final String question;
        private final int answer;

        public Question(String question, int answer) {
            this.question = question;
            this.answer = answer;
        }

        public String getQuestion() {
            return question;
        }

        public int getAnswer() {
            return answer;
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(MathQuiz2::new);
    }
}
界面显示:

标签:记录,int,30,Question,private,answer,new,public
From: https://www.cnblogs.com/pygmy-killer-whale/p/18442509

相关文章

  • LSTM模型改进实现多步预测未来30天销售额
    关于深度实战社区我们是一个深度学习领域的独立工作室。团队成员有:中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等,曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万+粉丝,拥有2篇国家级人工智能发明专利。社区特色:深度实战算法创新获取全部完整项目......
  • 【2024.9.30】NOIP2024 赛前集训-刷题训练(4)
    【2024.9.30】NOIP2024赛前集训-刷题训练(4)Problem-2000D-Codeforces给一串数和一串LR字符,L可以向右连接R,覆盖部分的LR不能再使用,但覆盖部分可以有被禁用的LR。每次覆盖部分的数字之和计入答案,求最大答案。手玩一下发现可以贪心。从最左边的L和最右边的R开始贪心。......
  • 9.30
    [实验任务一]:UML复习阅读教材第一章复习UML,回答下述问题:面向对象程序设计中类与类的关系都有哪几种?分别用类图实例说明。1、关联关系       ①、单向关联  ②、双向关联  ③、多重性关联   ④、聚合关联  ⑤、组合关联  2、依赖关......
  • 20240930 模拟赛总结
    期望得分:100+80+0+20=200实际得分:0+80+10+20=110emmmm有点唐T1呃呃呃题读错了……怎么是至少啊啊啊啊啊啊啊啊啊啊啊。懒得喷。我的读题能力一直都很逆天!T280分是好构造的,最后20分很困难啊!我试了好多办法都失败了!浪费了1个小时,以后要衡量一下性价比,有这1小时,还不如去......
  • SS240930B. 字符画(picture)
    SS240930B.字符画(picture)在一个\(10^7\times10^7\)的格子里,涂上至多\(900\)个格子。满足不存在一个格子恰好\(1\)个或\(3\)个相邻位置被涂色,定义恰好四个相邻格子都涂了颜色的格子是好的格子。构造一种涂色方案使得好的格子数量恰好是\(n\le300\)。涂颜色的格子和......
  • 高级java每日一道面试题-2024年9月30日-算法篇-LRU是什么?如何实现?
    如果有遗漏,评论区告诉我进行补充面试官:LRU是什么?如何实现?我回答:LRU(LeastRecentlyUsed)是一种常用的缓存淘汰策略,用于在缓存满时决定哪些数据应该被移除。LRU算法的基本思想是:当缓存达到其容量上限时,最近最少使用的数据会被优先淘汰。这种策略假设最近使用的数据在......
  • 高级java每日一道面试题-2024年9月30日-服务器篇[Redis篇]-Redis持久化有几种方式?
    如果有遗漏,评论区告诉我进行补充面试官:Redis持久化有几种方式?我回答:Redis是一个高性能的键值存储系统,常用于缓存、消息队列和实时数据分析等场景。为了保证数据的持久性,Redis提供了两种主要的持久化方式:RDB(RedisDatabaseBackup)和AOF(AppendOnlyFile)。这两种方......
  • 校测 2024 0930 数学
    0-30-0,数学还只打了暴力,菜就多练Problem1.facsum省流:\(f(n)=(\sum\limits_{d\midn}\varphi(d))^m(\sum\limits_{d\midn}\sigma_0(d)\mu(\frac{n}{d})\frac{n}{d})\)求\(\sum\limits_{i=1}^nf(i)\bmod1e9+7\)大概是把前面的区域以后再来探索吧Problem2.groupM......
  • C语言学习记录
     9.24号b站上学习了swich条件语句和while循环语句9.25号【四舍五入】#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>intmain(){floata=0;scanf("%f",&a);floatb=0;b=a;if(0<a){while(a>1......
  • 20240930
    TheOnlyWaytotheDestination首先假如两个墙之间的间隔大于等于二了,那么就直接输出\(no\),如果能在图的空隙中找到一个\(2*2\)的矩形,那么也是输出\(no\),然后我们可以把每一列看成一个点,再把每个空隙看成一条边即可,用并查集维护ASimpleMSTProblem一个性质我......