首页 > 其他分享 >2024/9/30 日 日志

2024/9/30 日 日志

时间:2024-10-09 21:49:59浏览次数:9  
标签:count java ArrayList 30 2024 add new 日志 public

今天下午进行了国庆假期前的小测。
我们需要界面化生成30道四则运算题。在此次测试中,我原打算模仿迷宫游戏的格式将题目尽数输出。
但在简化过程多层循环时遇到了问题 i j的位置当然可变,但无法保证时在一行中输出不同的题目。加之频繁调整位置让过程变得复杂。
以下是滑轮完成。

Count.java的内容如下
点击查看代码
import java.util.ArrayList;
import java.util.Random;

class Count {
    ArrayList<Integer> number1 = new ArrayList<>();
    ArrayList<Integer> number2 = new ArrayList<>();
    ArrayList<Integer> number3 = new ArrayList<>();
    ArrayList<String> number4 = new ArrayList<>();

    public Count() {
        count();
    }

    private void count() {
        Random rand = new Random();
        String[] symbols = {"+", "-", "*", "/"};
        int count = 0;

        while (count < 30) {
            int num1 = rand.nextInt(100); // 生成0到99之间的随机数
            int num2 = rand.nextInt(1, 100); // 生成1到99之间的随机数,避免 num2 为 0

            int operationIndex = rand.nextInt(symbols.length);
            String operation = symbols[operationIndex];
            int result;

            // 依据运算符计算结果,并检查有效性
            switch (operation) {
                case "+":
                    result = num1 + num2;
                    break;
                case "-":
                    if (num1 < num2) continue; // 确保不出现负数
                    result = num1 - num2;
                    break;
                case "*":
                    if (num1 * num2 >= 1000) continue; // 确保乘法结果小于1000
                    result = num1 * num2;
                    break;
                case "/":
                    if (num1 % num2 != 0) continue; // 确保整除
                    result = num1/num2;
                    break;
                default:
                    continue; // 不应该到达这里
            }

            // 将有效的题目添加到相应的列表中
            number1.add(num1);
            number2.add(num2);
            number3.add(result);
            number4.add(operation);

            count++;
        }
    }

    public ArrayList<Integer> getNumber1() {
        return number1;
    }

    public ArrayList<Integer> getNumber2() {
        return number2;
    }

    public ArrayList<Integer> getNumber3() {
        return number3;
    }

    public ArrayList<String> getNumber4() {
        return number4;
    }
}

CountJFrame.java的内容如下

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

public class CountJFrame extends JFrame {
    Count count = new Count();
    JTextField[] inputFields;
    JLabel timerLabel;

    Timer timer;
    int remainingTime = 180; // 设置计时器为60 秒

    public CountJFrame() {
        // 界面初始化
        initJFrame();
        // 添加题目到界面
        initView();
        // 启动计时器
        startTimer();
        // 让界面显示
        this.setVisible(true);
    }

    private void initJFrame() {
        // 设置界面的宽高
        this.setSize(500, 400);
        // 设置标题
        this.setTitle("四则运算");
        // 设置界面置顶
        this.setAlwaysOnTop(true);
        // 设置界面居中
        this.setLocationRelativeTo(null);
        // 设置界面关闭
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        // 设置布局为 null
        this.setLayout(null);
    }

    // 添加题目
    private void initView() {
        int numQuestions = count.number1.size(); // 题目数量
        inputFields = new JTextField[numQuestions]; // 创建输入框数组

        // 设置计时器标签
        timerLabel = new JLabel("剩余时间: " + remainingTime + "秒");
        timerLabel.setBounds(10, 10, 200, 30);
        this.getContentPane().add(timerLabel);

        // 在 GridLayout 中显示题目
        JPanel questionPanel = new JPanel();
        questionPanel.setLayout(new GridLayout(0, 2, 10, 10)); // 每行2列
        for (int i = 0; i < numQuestions; i++) {
            // 创建题目标签
            JLabel questionLabel = new JLabel(count.number1.get(i) + " " + count.number4.get(i) +
                    " " + count.number2.get(i) + " = ?");
            questionLabel.setBorder(new BevelBorder(BevelBorder.LOWERED));
            questionPanel.add(questionLabel);

            // 创建输入框
            inputFields[i] = new JTextField(); // 修正这里
            questionPanel.add(inputFields[i]);
        }

        // 将题目面板添加到滚动面板中
        JScrollPane scrollPane = new JScrollPane(questionPanel);
        scrollPane.setBounds(10, 50, 460, 250); // 设置滚动面板的位置和大小
        this.getContentPane().add(scrollPane);

        // 添加提交按钮
        JButton submitButton = new JButton("提交");
        submitButton.setBounds(380, 310, 80, 30);
        submitButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                StringBuilder incorrectAnswers = new StringBuilder();
                boolean allCorrect = true;

                for (int i = 0; i < inputFields.length; i++) {
                    String userInput = inputFields[i].getText();
                    // 检查用户输入与正确答案是否相等
                    if (!userInput.equals(String.valueOf(count.number3.get(i)))) {
                        incorrectAnswers.append(count.number1.get(i))
                                .append(" ").append(count.number4.get(i))
                                .append(" ").append(count.number2.get(i))
                                .append(" = ? (正确答案: ")
                                .append(count.number3.get(i)).append(")\n");
                        allCorrect = false;
                    }
                }
                // 创建一个JDialog作为父窗口
                JDialog dialog = new JDialog(CountJFrame.this, "结果", true);
                dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
                dialog.setAlwaysOnTop(true);
                dialog.setLocationRelativeTo(CountJFrame.this); // 居中于主窗口

                if (allCorrect) {
                    JOptionPane.showMessageDialog(dialog, "所有答案正确!");
                } else {
                    JOptionPane.showMessageDialog(dialog, "有答案不正确,请查看:\n" + incorrectAnswers.toString());
                }
                timer.stop(); // 停止计时器
            }
        });
        this.getContentPane().add(submitButton);
    }

    // 启动计时器
    private void startTimer() {
        timer = new Timer(1000, new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                remainingTime--;
                timerLabel.setText("剩余时间: " + remainingTime + "秒");
                if (remainingTime <= 0) {
                    timer.stop();
                    // 时间到时自动判断答案
                    JOptionPane.showMessageDialog(null, "时间到,请提交答案!");
                    StringBuilder incorrectAnswers = new StringBuilder();
                    boolean allCorrect = true;

                    for (int i = 0; i < inputFields.length; i++) {
                        String userInput = inputFields[i].getText();
                        // 检查用户输入与正确答案是否相等
                        if (!userInput.equals(String.valueOf(count.number3.get(i)))) {
                            incorrectAnswers.append(count.number1.get(i))
                                    .append(" ").append(count.number4.get(i))
                                    .append(" ").append(count.number2.get(i))
                                    .append(" = ? (正确答案: ")
                                    .append(count.number3.get(i)).append(")\n");
                            allCorrect = false;
                        }
                    }

                    if (allCorrect) {
                        JOptionPane.showMessageDialog(null, "所有答案正确!");
                    } else {
                        JOptionPane.showMessageDialog(null, "有答案不正确,请查看:\n" + incorrectAnswers.toString());
                    }
                }
            }
        });
        timer.start();
    }

    public static void main(String[] args) {
        new CountJFrame();
    }
}

Main.java的内容如下

点击查看代码
//20234023 张一衡
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        //界面
        new CountJFrame();


    }


}

当然,可做的优化还有很多,我将在后续完成。
在这里,我学到了一个新的用法即:
// 将题目面板添加到滚动面板中
JScrollPane scrollPane = new JScrollPane(questionPanel);
scrollPane.setBounds(10, 50, 460, 250); // 设置滚动面板的位置和大小
this.getContentPane().add(scrollPane);

以及网格结构
JPanel questionPanel = new JPanel();
questionPanel.setLayout(new GridLayout(0, 2, 10, 10)); // 每行2列

这样的使用避免了频繁的JLabel以及 JTextField的位置修改.

标签:count,java,ArrayList,30,2024,add,new,日志,public
From: https://www.cnblogs.com/MoonbeamsC/p/18455240

相关文章

  • 2024/10/8日 日志
    在今天我对之前的小测内容进行了更新和对之前的想法进行了实现,改变了界面化的形式。Count.java点击查看代码importjava.util.ArrayList;importjava.util.Random;publicclassCount{ArrayList<Integer>number1=newArrayList<>();ArrayList<Integer>number2......
  • P6309 题解
    很经典但是很好的题目。/qiang标签:线段树。数轴上有一些关键点,不同的关键点可能在同一坐标。关键点的坐标均为整数。支持两种操作:删去/添加一些关键点。取一个点。使得它与\([l,r]\)范围内所有关键点的距离最小。求最小距离。\(\text{关键点的坐标数}\le3\times......
  • 2024.10.9训练记录
    下午提高组模拟省流:又被lyy吊打了晚上订正A神秘猜结论题,场上少猜了一点挂了\(18\)分,遗憾。结论:\(ans\in[0,3]\)\(0/1\)可以直接判。\(1\)的情况就是存在一个前缀\(a_{1,i}\)满足出现的数是\(1\)到\(i\)。\(3\)的情况仅当\(a_1=n\)且\(a_n=1\)。场上......
  • 中国移动宽带 IPv6 连接到公网,家庭宽带设置服务器(2024年10月)
    摘要:1、中国移动的宽带,已经支持IPv6,需要宽带光猫上做好设置。2、需要从中国移动的服务器上获取公网IPv6地址。 操作:1、确保宽带WAN连接的前缀获取方式:PrefixDelegation网关的默认登录用户名(user)、密码,在设备的背面有写着。 如果不是,就联系客服,询问宽带终端的超级......
  • 【读书笔记-《30天自制操作系统》-26】Day27
    本篇内容不多,主要是一些优化的工作。首先优化了应用程序,然后引入对应用程序的保护功能,最后引入库的概念。1.应用程序优化首先来解决上一篇中遗留的一个bug:使用ncst命令运行的应用程序,按下Shift+F1或者点击x按钮都无法关闭。分析上一篇新增的代码,没有发现问题,因此这个......
  • 20222303 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    1.实验内容在本周的学习中,重新回顾了栈和堆的概念,还学习了安全漏洞的相关概念,然后聚焦在其中的缓冲区溢出漏洞上,明白了缓冲区溢出的定义及发生的原理,并了解了缓冲区溢出发展历史上的一些经典攻击案例,收获颇丰。在本次的实验中,我掌握了反汇编与十六进制编程器相关知识,同时对NOP,......
  • 2024诺贝尔物理学奖,为什么颁给了人工智能
    瑞典皇家科学院当地时间10月8日宣布,将2024年诺贝尔物理学奖授予约翰·J·霍普菲尔德和杰弗里·E·辛顿,表彰他们在使用人工神经网络进行机器学习的基础性发现和发明。两位获奖者从20世纪80年代起就开展了与物理学相关的人工神经网络的重要工作。这让很多网友“满头问号”。诺贝尔......
  • .NET周刊【9月第4期 2024-09-22】
    国内文章.NET常见的几种项目架构模式,你知道几种?(附带使用情况投票)https://www.cnblogs.com/Can-daydayup/p/18421685文章介绍了软件项目的几种架构模式,包括三层架构、MVC、DDD、整洁架构和CQRS。这些模式通过分层职责,分别处理表示、业务逻辑和数据访问等功能,强调系统的可维护性......
  • 2024.10.09 力扣刷题 盛水最多的容器
    题目:这边是参考了B站UP主的思路进行了解答,采用双下标访问的方式进行。如果要水最多的话,一定是高的那端找低的那端,然后算出面积。如果是低的那端找高的那端,那本身下限就在自己身上,所以不从低的端固定不变。附上代码:intmaxArea(std::vector<int>&height){ if(height.empty......
  • [20241006]跟踪library cache lock library cache pin使用gdb(补充测试3).txt
    [20241006]跟踪librarycachelocklibrarycachepin使用gdb(补充测试3).txt--//补充测试产生光标已经缓存的情况下,生成新子光标的调用librarycachelocklibrarycachepin的情况。1.环境:SCOTT@book01p>@ver2==============================PORT_STRING          ......