生成随机数学算式可谓是计算机领域的一个经典的问题,
本文使用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/10public 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() {@Overridepublic 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);}@Overridepublic 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);}}@Overridepublic void mousePressed(MouseEvent e) {}@Overridepublic void mouseReleased(MouseEvent e) {}@Overridepublic void mouseEntered(MouseEvent e) {}@Overridepublic 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();}
}
测试结果展示
麻烦点个赞吧~