java随机生成数学算式

发布于:2024-10-15 ⋅ 阅读:(136) ⋅ 点赞:(0)

生成随机数学算式可谓是计算机领域的一个经典的问题,

本文使用JFrame,JButton,JTextField等java图形化工具,生成一个可以随机切换题目,可以实现计时功能的一个图形化界面

源代码展示

randomMath类

package login;

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.Random;

//Author:XYu1230
//Time:2024/10/10

public class randomMath extends JFrame implements MouseListener {

    ArrayList<Integer> ans = new ArrayList<>(30);
    ArrayList<JTextField> res = new ArrayList<>();
    JButton pd = new JButton("查看评分");
    JButton jb1 = new JButton("切换题目");
    JButton jb2 = new JButton("计时功能");
    JFrame time = new JFrame();
    JTextField inputTime = new JTextField();
    JButton jb3 = new JButton("确认");

    // 程序主体代码

    public randomMath(){
        initJFrame();
        initView();

        this.setVisible(true);

    }


    public void calculateScore(){
        int score = 0;
        for (int i = 0; i < ans.size(); i++) {
            if(ans.get(i).toString().equals(res.get(i).getText())){
                score++;
            }
        }

         double accuracy = score*1.0 / 20;


        String text = "错题数:" + (20 - score) + "\n" +
                "      你的正确率为:" + accuracy ;

//        String s = "SELECT t.*\n" +
//                "     FROM lxy.user t\n" +
//                "     LIMIT 501"
        showJDialog(text);
    }

    public void testTimer(long t){
        MyTimer timer = new MyTimer();
        timer.schedule(new Runnable() {
            @Override
            public void run() {
                //System.out.println("666666");
                calculateScore();
            }
        },t);
    }


    public void initView() {
        this.getContentPane().removeAll();

        for (int i = 1; i <= 5; i++) {
            for (int j = 1; j <= 4; j++) {
                JLabel j1 = new JLabel(rMath());
                JTextField result = new JTextField();
                result.setBounds(i*150+50,j*80,80,30);
                j1.setBounds(i*150,j*80,80,30);
                this.getContentPane().add(j1);
                this.getContentPane().add(result);
                res.add(result);
            }
        }
        pd.setBounds(450,400,120,30);
        Font font = new Font("Serif",Font.BOLD,20);
        pd.setFont(font);
        this.getContentPane().add(pd);
        pd.addMouseListener(this); //添加鼠标监听

        jb1.setBounds(10,500,120,30);
        this.getContentPane().add(jb1);
        jb1.addMouseListener(this);

        jb2.setBounds(10,450,120,30);
        this.getContentPane().add(jb2);
        jb2.addMouseListener(this);

        System.out.println("-------------");
        for (int i = 0; i < ans.size(); i++) {
            System.out.println(ans.get(i));
        }

        this.getContentPane().repaint();
    }

    public void initJFrame() {
        this.setSize(1000, 600);//设置宽高
        this.setTitle("20道随机计算题");//设置标题
        this.setDefaultCloseOperation(3);//设置关闭模式
        this.setLocationRelativeTo(null);//居中
        this.setAlwaysOnTop(true);//置顶
        this.setLayout(null);//取消内部默认布局
    }

    //设置弹窗
    public void showJDialog(String content) {
        //创建一个弹框对象
        JDialog jDialog = new JDialog();
        //给弹框设置大小
        jDialog.setSize(500, 200);
        //让弹框置顶
        jDialog.setAlwaysOnTop(true);
        //让弹框居中
        jDialog.setLocationRelativeTo(null);
        //弹框不关闭永远无法操作下面的界面
        jDialog.setModal(true);

        //创建Jlabel对象管理文字并添加到弹框当中
        JLabel warning = new JLabel(content);
        warning.setBounds(0, 0, 200, 150);
        jDialog.getContentPane().add(warning);

        //让弹框展示出来
        jDialog.setVisible(true);
    }

    //生成算式
    public String rMath(){
        Random r = new Random();
        Character[] chArr = {'+','-','*','/'};
        int first,second;
        char c;
        int index = 0;
        while(true){
             first = r.nextInt(100);
             second = r.nextInt(99)+1;
             c = chArr[r.nextInt(4)];
            if(c == '/' && first % second != 0) continue;
            else if(c == '*' && first * second > 999) continue;
            else if(c == '-' && first - second < 0) continue;
            else {
                if(c == '+') ans.add(first + second);
                else if(c == '-') ans.add(first - second);
                else if(c == '*') ans.add(first * second);
                else if(c == '/') ans.add(first / second);
                break;
            }
        }

        String s = (first +""+ c+ "" + second + " = ").toString();
        return s;
    }

    public void initTimeSet(){

        time.setSize(500, 300);//设置宽高
        time.setTitle("计时设置");//设置标题
        time.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);//设置关闭模式
        time.setLocationRelativeTo(null);//居中
        time.setAlwaysOnTop(true);//置顶
        time.setLayout(null);//取消内部默认布局


        inputTime.setBounds(150,100,200,30);
        time.getContentPane().add(inputTime);


        JLabel jl1 = new JLabel("定时时间");
        jl1.setBounds(100,100,80,30);
        time.getContentPane().add(jl1);


        jb3.setBounds(180,200,80,30);
        time.getContentPane().add(jb3);
        jb3.addMouseListener(this);

        time.setVisible(true);
    }

    @Override
    public void mouseClicked(MouseEvent e) {
        if(e.getSource() == pd){
            calculateScore();
        }
        else if(e.getSource() == jb1){
            ans.clear();
            res.clear();
            System.out.println(ans);
            initView();
        }
        else if(e.getSource() == jb2){
            initTimeSet();
        }
        else if(e.getSource() == jb3){
            String text = inputTime.getText();
            testTimer(Long.parseLong(text));
            showJDialog("计时开始");
            time.setVisible(false);
        }
    }

    @Override
    public void mousePressed(MouseEvent e) {

    }

    @Override
    public void mouseReleased(MouseEvent e) {

    }

    @Override
    public void mouseEntered(MouseEvent e) {

    }

    @Override
    public void mouseExited(MouseEvent e) {

    }
}
测试类
package login;

import java.sql.Time;
import java.util.TimerTask;

public class randomMathTest {
    public static void main(String[] args) {
        new randomMath();
    }
}

测试结果展示

麻烦点个赞吧~


网站公告

今日签到

点亮在社区的每一天
去签到