首页 > 编程语言 >程序员世界大冒险d22

程序员世界大冒险d22

时间:2024-09-30 22:11:43浏览次数:8  
标签:rand String int frame d22 程序员 questions new 大冒险

今天上了Java课,老师让生成对话框,不怎么会,该学学的,下面是代码:
import java.util.Random;
import javax.swing.;
import java.awt.
;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

class Method {
public String[][] generateQuestions() {
Random rand = new Random();
String[] questions = new String[30];
String[] answers = new String[30];

    for (int i = 0; i < 30; i++) {
        int fushu = rand.nextInt(100);
        int m = rand.nextInt(100) - fushu;
        int n = rand.nextInt(100) - fushu;
        int q = rand.nextInt(100);
        int o = rand.nextInt(4);
        int p = rand.nextInt(10); // 更改此处以限制范围

        switch (o) {
            case 0: // 加法
                questions[i] = n > 0 ? m + "+" + n + "=" : m + "" + n + "=";
                answers[i] = String.valueOf(m + n);
                break;
            case 1: // 减法
                questions[i] = m + "-" + q + "=";
                answers[i] = String.valueOf(m - q);
                break;
            case 2: // 乘法
                int multiplier, multiplicand;
                do {
                    multiplier = rand.nextInt(10) + 1; // 单个乘数范围 [1, 10]
                    multiplicand = rand.nextInt(10) + 1; // 单个乘数范围 [1, 10]
                } while (multiplier * multiplicand > 999);

                questions[i] = multiplier + "*" + multiplicand + "=";
                answers[i] = String.valueOf(multiplier * multiplicand);
                break;
            case 3: // 除法
                int dividend;
                do {
                    dividend = rand.nextInt(100);
                    int divisor = rand.nextInt(99) + 1; // g can't be 0
                    if (dividend % divisor == 0) {
                        questions[i] = dividend + "/" + divisor + "=";
                        answers[i] = String.valueOf(dividend / divisor);
                        break;
                    }
                } while (true);
                break;
        }
    }
    return new String[][]{questions, answers}; // 返回问题和答案
}

}

public class Math4 {
public static void main(String[] args) {
Method method = new Method();
String[][] questionsAndAnswers = method.generateQuestions();
String[] questions = questionsAndAnswers[0];
String[] answers = questionsAndAnswers[1];

    // 创建自定义的JFrame
    JFrame frame = new JFrame("整数四则运算测试");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400, questions.length * 50 + 150); // 根据问题数量动态设置高度
    frame.setLayout(new GridLayout(questions.length + 1, 2)); // 多一行用于倒计时显示

    // 添加问题和输入框到帧中
    JTextField[] answerFields = new JTextField[questions.length]; // 保存所有答案文本框
    for (int i = 0; i < questions.length; i++) {
        JLabel questionLabel = new JLabel(questions[i]);
        answerFields[i] = new JTextField(15);
        frame.add(questionLabel);
        frame.add(answerFields[i]);
    }

    // 添加倒计时标签
    JLabel timerLabel = new JLabel("剩余时间: 30 秒");
    frame.add(timerLabel);

    // 创建提交按钮
    JButton submitButton = new JButton("提交所有答案");
    frame.add(submitButton); // 将按钮添加到框架

    // 提交按钮的动作事件
    submitButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            StringBuilder answersResult = new StringBuilder();
            int correctCount = 0;
            int incorrectCount = 0;

            for (int i = 0; i < questions.length; i++) {
                String userAnswer = answerFields[i].getText();
                if (userAnswer.equals(answers[i])) {
                    correctCount++;
                } else {
                    incorrectCount++;
                    answersResult.append(questions[i] + " 正确答案: " + answers[i] + "\n");
                }
            }

            JOptionPane.showMessageDialog(frame,
                    "正确数量: " + correctCount + "\n" +
                            "错误数量: " + incorrectCount + "\n" +
                            "错误详情:\n" + answersResult.toString(),
                    "提交的答案",
                    JOptionPane.INFORMATION_MESSAGE);
        }
    });

    // 倒计时逻辑
    final int countdownTime = 120; // 倒计时秒数
    Timer timer = new Timer(1000, new ActionListener() {
        int timeLeft = countdownTime;

        @Override
        public void actionPerformed(ActionEvent e) {
            if (timeLeft > 0) {
                timerLabel.setText("剩余时间: " + timeLeft + " 秒");
                timeLeft--;
            } else {
                ((Timer) e.getSource()).stop();
                JOptionPane.showMessageDialog(frame, "时间到!", "提示", JOptionPane.INFORMATION_MESSAGE);
                // 禁用文本框和按钮
                for (Component component : frame.getContentPane().getComponents()) {
                    if (component instanceof JTextField) {
                        component.setEnabled(false);
                    }
                }
                submitButton.setEnabled(false);
            }
        }
    });

    frame.setVisible(true); // 显示框架
    timer.start(); // 启动计时器
}

}

标签:rand,String,int,frame,d22,程序员,questions,new,大冒险
From: https://www.cnblogs.com/3012193641qq/p/18442506

相关文章

  • 分享C++程序员面试八股文(十五)
    以下是C++常见八股文(十五):一、C++中的高级文件操作(AdvancedFileOperations)解释文件随机访问的方法及应用场景方法:在C++中,可以使用文件流对象(如std::ifstream、std::ofstream、std::fstream)的seekg(设置输入位置)和seekp(设置输出位置)成员函数来实现文件的随机访问。这......
  • 分享C++程序员面试八股文(十四)
    以下是C++常见八股文(十四):一、C++中的智能指针高级用法(AdvancedUsageofSmartPointers)解释unique_ptr、shared_ptr和weak_ptr的循环引用问题及解决方法循环引用问题:当使用shared_ptr进行相互引用时,可能会导致循环引用问题。例如,两个对象相互持有对方的shared_pt......
  • 行业机遇!程序员:如何选择适合自己的就业方向?
    随着科技的不断进步和发展,程序员的就业前景也越来越广阔。而在这个快速发展的行业中,在各个领域都有着广泛的应用,信息技术的迅猛发展使得程序员在现代社会中占据了举足轻重的地位。从软件开发到网络安全,再到人工智能,程序员的就业机会广泛且前景光明,为程序员提供了丰富多彩的职......
  • 数据库离程序员有多远 - cnblogs救园行动感想
    这两周,我参与了博客园的“2024救园行动”,成了终身会员。说实话,当初报名的时候,我心里还挺兴奋的,想着这下能和不少老朋友在这个社区里再次相聚。毕竟,在数据库行业摸爬滚打了这么多年,自认为也认识不少圈内人士,更不用说程序员群体了。可结果却有点出乎意料。当我翻看那500位终身会员的......
  • 未来的程序员的自我介绍
    自我介绍大家好,非常高兴能在这里与你们分享我的编程学习旅程。在这个数字化日益发展的时代,我认为掌握编程技能不仅是一项实用的能力,也是通往未来世界的一把钥匙。通过这些博客,我希望记录下自己的成长历程,同时也希望能够得到大家的支持和建议。编程的目标作为一名普通的双......
  • 分享C++程序员面试八股文(十三)
    以下是C++常见八股文(十三):一、C++中的命名空间和模块的高级用法(AdvancedUsageofNamespacesandModules)解释命名空间别名和嵌套命名空间的作用及使用场景命名空间别名:作用:命名空间别名可以为一个较长或复杂的命名空间提供一个更简洁的名称,提高代码的可读性和可......
  • 【转型必看】Java到AI大模型,程序员的逆袭秘籍,转行不再是梦!
    随着技术的不断进步,人工智能(AI)大模型已经成为当今科技领域最热门的话题之一。许多开发者开始考虑从传统的软件开发领域,如Java,转向人工智能领域,今天小编和大家一起来探讨Java开发者是否可以转型到人工智能大模型,转型的优势,薪资对比,以及转型所需的知识和学习路线等。01Java......
  • 程序员世界大冒险d20
    昨天忘记写了,今天写吧,今天主要写了数据结构的作业--单链表基本操作,源代码如下:includedefineMAX_MN100000usingnamespacestd;typedefintElementType;typedefstructNode*PtrToNode;structNode{ElementTypeData;PtrToNodeNext;};typedefPtrToNodeList;in......
  • 程序员如何搞副业,零基础入门到精通,收藏这一篇就够了
    随着互联网的发展,程序员也越来越深入到各个行业当中。有了技术的加持,更加激发探索新的领域兴趣。当掌握一定的技术,也许很多程序员也开始考虑创业,将毕生所学的技术能力创造出新的价值。01创业的几点思路1、利用互联网创业。互联网行业投资风险小,因为可以有效的把握市场走......
  • 实操了 AI 大模型项目落地, 程序员成功转变为 AI 大模型工程师
    根据《2024年全球人工智能行业报告》最新的数据显示,全球AI市场预计将以每年超过40%的速度增长,到2030年市值将达到数万亿美元,这也是预示着在接下来的十年到十五年里,人工智能将获得巨大的发展红利。在过去的一年多时间里,我持续关注着大模型的发展趋势,并且尽可能地进行......