首页 > 其他分享 >今日总结

今日总结

时间:2024-10-21 13:00:05浏览次数:1  
标签:总结 int frame problems private new 今日 append

四则运算
import javax.swing.;
import java.awt.
;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

abstract class ProblemGenerator {
protected int maxOperands;
protected int numberRange;
protected boolean allowMultiplicationAndDivision;
protected boolean includeParentheses;
protected Random random;

public ProblemGenerator(int maxOperands, int numberRange, boolean allowMultiplicationAndDivision, boolean includeParentheses) {
    this.maxOperands = maxOperands;
    this.numberRange = numberRange;
    this.allowMultiplicationAndDivision = allowMultiplicationAndDivision;
    this.includeParentheses = includeParentheses;
    this.random = new Random();
}

public abstract String generateProblem();

protected double getRandomNumber() {
    return random.nextInt(numberRange) + 1;
}

protected char getRandomOperation() {
    char[] operations = {'+', '-', '*', '/'};
    char op = operations[random.nextInt(operations.length)];
    if (!allowMultiplicationAndDivision && (op == '*' || op == '/')) {
        return '+';
    }
    return op;
}

}

class SecondGradeProblemGenerator extends ProblemGenerator {
public SecondGradeProblemGenerator() {
super(2, 100, true, false);
}

@Override
public String generateProblem() {
    int num1 = (int) getRandomNumber();
    int num2 = (int) getRandomNumber();
    char operation = getRandomOperation();
    if (operation == '/') {
        while (num2 == 0 || num1 % num2 != 0) {
            num1 = (int) getRandomNumber();
            num2 = (int) getRandomNumber();
        }
    }
    return String.format("%d %c %d", num1, operation, num2);
}

}

class ThirdGradeProblemGenerator extends SecondGradeProblemGenerator {
public ThirdGradeProblemGenerator() {
super();
this.maxOperands = 4;
this.numberRange = 1000;
}

@Override
public String generateProblem() {
    StringBuilder problem = new StringBuilder();
    int operands = random.nextInt(maxOperands - 1) + 2;
    for (int i = 0; i < operands; i++) {
        problem.append((int) getRandomNumber());
        if (i < operands - 1) {
            problem.append(" ").append(getRandomOperation()).append(" ");
        }
    }
    return problem.toString();
}

}

class FourthGradeProblemGenerator extends ThirdGradeProblemGenerator {
public FourthGradeProblemGenerator() {
super();
this.maxOperands = 5;
this.includeParentheses = true;
}

@Override
public String generateProblem() {
    StringBuilder problem = new StringBuilder();
    int operands = random.nextInt(maxOperands - 1) + 2;
    for (int i = 0; i < operands; i++) {
        if (includeParentheses && random.nextBoolean()) {
            problem.append("(");
        }
        problem.append((int) getRandomNumber());
        if (includeParentheses && random.nextBoolean()) {
            problem.append(")");
        }
        if (i < operands - 1) {
            problem.append(" ").append(getRandomOperation()).append(" ");
        }
    }
    return problem.toString();
}

}

public class MathQuizAppGUI {
private JFrame frame;
private JTextArea questionArea;
private JTextField answerField;
private JTextArea resultArea;
private JComboBox gradeSelector;
private ProblemGenerator problemGenerator;
private List mistakes = new ArrayList<>();
private List problems = new ArrayList<>();
private int correctCount = 0;
private int totalCount = 0;

public MathQuizAppGUI() {
    initComponents();
}

private void initComponents() {
    frame = new JFrame("Math Quiz");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(800, 600);
    frame.setLayout(new BorderLayout());

    JPanel topPanel = new JPanel();
    topPanel.setLayout(new GridLayout(2, 1));
    JLabel titleLabel = new JLabel("Math Quiz", JLabel.CENTER);
    titleLabel.setFont(new Font("Arial", Font.BOLD, 32));
    topPanel.add(titleLabel);

    String[] grades = {"Select Grade", "Second Grade", "Third Grade", "Fourth Grade"};
    gradeSelector = new JComboBox<>(grades);
    gradeSelector.setFont(new Font("Arial", Font.PLAIN, 24));
    gradeSelector.addActionListener(e -> gradeChanged());
    topPanel.add(gradeSelector);

    frame.add(topPanel, BorderLayout.NORTH);

    questionArea = new JTextArea(10, 20);
    questionArea.setEditable(false);
    questionArea.setFont(new Font("Arial", Font.PLAIN, 24));
    frame.add(new JScrollPane(questionArea), BorderLayout.CENTER);

    answerField = new JTextField();
    answerField.setFont(new Font("Arial", Font.PLAIN, 24));
    frame.add(answerField, BorderLayout.SOUTH);

    JPanel buttonPanel = new JPanel();
    JButton submitButton = new JButton("Submit Answer");
    submitButton.setFont(new Font("Arial", Font.PLAIN, 18));
    submitButton.addActionListener(new SubmitActionListener());
    buttonPanel.add(submitButton);

    JButton nextProblemButton = new JButton("Next Problem Set");
    nextProblemButton.setFont(new Font("Arial", Font.PLAIN, 18));
    nextProblemButton.addActionListener(e -> generateNewProblemSet(10));
    buttonPanel.add(nextProblemButton);

    frame.add(buttonPanel, BorderLayout.EAST);

    resultArea = new JTextArea(10, 20);
    resultArea.setEditable(false);
    frame.add(new JScrollPane(resultArea), BorderLayout.WEST);

    frame.setVisible(true);
}

private void gradeChanged() {
    String selectedGrade = (String) gradeSelector.getSelectedItem();
    switch (selectedGrade) {
        case "Second Grade":
            problemGenerator = new SecondGradeProblemGenerator();
            break;
        case "Third Grade":
            problemGenerator = new ThirdGradeProblemGenerator();
            break;
        case "Fourth Grade":
            problemGenerator = new FourthGradeProblemGenerator();
            break;
        default:
            problemGenerator = null;
            return;
    }
    generateNewProblemSet(10);
}

private void generateNewProblemSet(int count) {
    if (problemGenerator == null) {
        JOptionPane.showMessageDialog(frame, "Please select a grade level first.", "Error", JOptionPane.ERROR_MESSAGE);
        return;
    }

    problems.clear();
    for (int i = 0; i < count; i++) {
        problems.add(problemGenerator.generateProblem());
    }
    displayProblems();
}

private void displayProblems() {
    StringBuilder displayText = new StringBuilder();
    for (int i = 0; i < problems.size(); i++) {
        displayText.append((i + 1)).append(". ").append(problems.get(i)).append("\n");
        if ((i + 1) % 3 == 0) {
            displayText.append("\n");
        }
    }
    questionArea.setText(displayText.toString());
}

private class SubmitActionListener implements ActionListener {
    @Override
    public void actionPerformed(ActionEvent e) {
        String userAnswers = answerField.getText();
        String[] answers = userAnswers.split("\\s+");
        if (answers.length != problems.size()) {
            JOptionPane.showMessageDialog(frame, "Please answer all questions!", "Error", JOptionPane.ERROR_MESSAGE);
            return;
        }

        resultArea.setText("");
        correctCount = 0;
        totalCount = problems.size();
        StringBuilder results = new StringBuilder();

        for (int i = 0; i < problems.size(); i++) {
            double correctAnswer = evaluateExpression(problems.get(i));
            try {
                double userAnswer = Double.parseDouble(answers[i]);
                if (Math.abs(userAnswer - correctAnswer) < 1e-9) {
                    correctCount++;
                    results.append("Correct: ").append(problems.get(i)).append(" = ").append(userAnswer).append("\n");
                } else {
                    mistakes.add(problems.get(i));
                    results.append("Wrong: ").append(problems.get(i)).append(" = ").append(correctAnswer).append("\n");
                }
            } catch (NumberFormatException ex) {
                mistakes.add(problems.get(i));
                results.append("Invalid input for ").append(problems.get(i)).append("\n");
            }
        }

        resultArea.setText(results.toString());
        double accuracy = ((double) correctCount / totalCount) * 100;
        JOptionPane.showMessageDialog(frame, "You got " + correctCount + " out of " + totalCount + " correct!\nAccuracy: " + accuracy + "%", "Results", JOptionPane.INFORMATION_MESSAGE);

        saveProblemsToFile();
    }
}

private void saveProblemsToFile() {
    try (BufferedWriter writer = new BufferedWriter(new FileWriter("problems.txt"))) {
        for (String problem : problems) {
            writer.write(problem + "\n");
        }
        JOptionPane.showMessageDialog(frame, "Problems saved to problems.txt", "Saved", JOptionPane.INFORMATION_MESSAGE);
    } catch (IOException e) {
        e.printStackTrace();
        JOptionPane.showMessageDialog(frame, "Failed to save problems", "Error", JOptionPane.ERROR_MESSAGE);
    }
}

private double evaluateExpression(String expr) {
    String[] tokens = expr.split(" ");
    double result = Double.parseDouble(tokens[0]);
    int index = 1;
    while (index < tokens.length) {
        String operator = tokens[index++];
        double nextNum = Double.parseDouble(tokens[index++]);
        switch (operator) {
            case "+":
                result += nextNum;
                break;
            case "-":
                result -= nextNum;
                break;
            case "*":
                result *= nextNum;
                break;
            case "/":
                result /= nextNum;
                break;
        }
    }
    return result;
}

public static void main(String[] args) {
    SwingUtilities.invokeLater(MathQuizAppGUI::new);
}

}

标签:总结,int,frame,problems,private,new,今日,append
From: https://www.cnblogs.com/cbscnblogs/p/18489230

相关文章

  • 最强总结!十大回归类算法模型 !!!
     【转载】 最强总结!十大回归类算法模型!!! 今儿和大家分享的回归类算法有:线性回归Ridge回归Lasso回归弹性网络回归多项式回归决策树回归随机森林回归支持向量回归K近邻回归梯度提升回归1.线性回归线性回归是一种用于描述两个或多个变量......
  • whaosoftの图像知识总结
    搬来大佬的笔记啊为了给自己学习啊发贴没任何好处~~图像的组成图像的通道与深度深度:将计算机中存储单个像素所用的bit位,称为图像的深度例如:通道:描述一个像素点,如果是灰度图,只须用一个数值来表示,就是单通道。如果一个像素点有RGB三种颜色来描述,就是三通道,如果用RGB+alp......
  • B站协议登录到实现各种功能完整代码(专栏总结)
    B站协议登录、点赞、收藏、转发实现及代码关注、动态转发实现动态抽奖实现及代码直播预约抽奖实现及代码本文为本专栏的总结文章一、扫码登录请求获取二维码包,得到二维码链接和qrcode_key参数之后,利用qrcode_key循环GET请求登录状态包即可,扫码成功时的响应中还会有一个......
  • 10.14-10.20 总结
    联考题解:https://www.cnblogs.com/british-union/p/liankao.html如果忽略挂分,这周打的还可以。但是问题是挂了不少分导致实际得分远不如期望得分。做题:做了几道ProjectEuler,有一道没想出来:588,638,457,307。P10353:群论题AGC012F尝试枚举一下前几个的限制,发现限制就是在\([i,......
  • 前言——25机械考研复试专业面试问题汇总 机械复试超全流程攻略 机械复试看这一个专栏
    一、开篇寄语:在准备考研复试的关键时期,许多学弟学妹们往往会寻求各种资料来辅助复习,市面上也因此涌现了大量的“考研复试全流程全攻略”。然而,这些攻略往往存在以下问题:1、内容不完整性遗漏关键信息:许多攻略在描述考研复试流程时,未能全面覆盖所有关键环节,导致考生可能忽视某......
  • 今日总结
    importjavax.swing.;importjava.awt.;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.util.ArrayList;importjava.util.List;importjava.util.Random;classArithmeticProblem{privateint[]operands;char[]operators;......
  • CNVD漏洞和证书挖掘经验总结
    前言        本篇文章主要是分享一下本人挖掘CVND漏洞碰到的一些问题,根据过往成功归档的漏洞和未归档的漏洞总结出的经验,也确实给审核的大佬们添了很多麻烦(主要真的没人教一下,闷着头尝试犯了好很多错误,希望各位以后交一个通过一个。当然,也一定要注意测试资产的范围、......
  • 矩阵的秩性质总结
    矩阵的秩用法实在过于灵活,写篇随笔记录一下。矩阵的秩定义矩阵的秩常见定义有以下两种:非零子式的最高阶数。行(列)向量空间的极大无关组向量个数。矩阵的秩基本性质从定义出发不难得到以下性质:\(0\ler(A)\le\min(m,n)\)。\(r(A^T)=r(A)\)。\(r(kA)=r(A)\),要求\(k\n......
  • 《计算机基础与程序设计》第四周学习总结
    学期(2024-2025-1)学号(20241412)《计算机基础与程序设计》第四周学习总结作业信息这个作业属于哪个课程2024-2025-1-计算机基础与程序设计https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP这个作业要求在哪里2024-2025-1计算机基础与程序设计第一周作业https:......
  • 2024-2025 20241318 《计算机基础与程序设计》第四周学习总结
    这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP这个作业要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html#WEEK04这个作业的目标自学教材计算机科学概论(第七版)第4章,第5章并完成云班课测试《C语言程序设计》第3章并完成......