前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java 实现简易随机学生点名器(附源码)

Java 实现简易随机学生点名器(附源码)

作者头像
Lcry
发布2022-11-29 18:09:56
1.3K0
发布2022-11-29 18:09:56
举报
文章被收录于专栏:Lcry个人博客

最近找了一份教学生Java入门的‘差事’,刚刚讲了一些基础,为了引起大家学习兴趣,于是写了一个简单的点名器,awt因为很少涉及,所以找的网上的,分别写了List版本和数组版本,因为还没给学生讲解List,只学习数组,所以单独改造了一个数组版本的,因为考虑到通用型,采用读取任意位置的txt文本,只需要按照格式一行一行的写入学生就可以实现点名了,采用的Random实现伪随机。直接上代码,基本上都能看懂吧。

数组版本源码:

代码语言:javascript
复制
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;

/**
 * 简易版本随机点名器-数组版本
 * 
 * @author lcry
 *
 */
public class RandomStudent1 {
    // 读取名单修改路径即可(txt文本文件,一行一个学生即可)
    public static String localurl = "H:\\class1.txt";

    // 程序入口
    public static void main(String[] args) {
        RandomStudent1 rn = new RandomStudent1();
        rn.init();
    }

    // 主面板
    JFrame rFrame = new JFrame("简易随机点名器--By:Lcry");
    // 名字
    String[] stuName = readclass(localurl);
    // 用于存储名字的标签
    JLabel name = new JLabel();
    // 按钮
    JButton btn = new JButton("随机点名");
    // 采用的是伪随机数,大家也可以不用这个,这个在网上可以找到java随机数的设置
    Random rd = new Random();

    public void init() {
        // 提示标签页面
        JLabel jt = new JLabel("随机点名器");
        // 设置标签居中
        jt.setHorizontalAlignment(SwingConstants.CENTER);
        // 设置字体大小
        jt.setFont(new Font("随机点名器", 1, 50));
        // 设置按钮大小
        btn.setPreferredSize(new Dimension(70, 39));
        // 设置名字显示的标签居中
        name.setHorizontalAlignment(SwingConstants.CENTER);
        // 通过匿名类实现Action按钮的监听事件
        btn.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // 获取随机的姓名
                String n = getRandomName();
                // 设置name标签的文字
                name.setText(n);
                // 设置字体
                name.setFont(new java.awt.Font(n, 1, 100));
                // 设置字体颜色
                name.setForeground(Color.red);
            }

        });
        // 获取JFrame的面板
        Container p = this.rFrame.getContentPane();
        // 设置布局方式,我采用的BorderLayout布局
        p.setLayout(new BorderLayout(3, 1));
        // 添加提示标签在北方
        p.add(jt, BorderLayout.NORTH);
        // 添加姓名标签在中央
        p.add(name, BorderLayout.CENTER);
        // 添加按钮控件在南方
        p.add(btn, BorderLayout.SOUTH);
        // 调整大小,这个是java中无法设置标签的大小
        rFrame.pack();
        // 设置窗体大小
        rFrame.setSize(500, 500);
        // 设置可以显示
        rFrame.setVisible(true);

    }

    // 获取随机的姓名
    public String getRandomName() {
        int a = 0;
        // random类去实现随机数时,只能设置上限,也就是说随机数产生的都是0-stuName.length之间的数字
        a = rd.nextInt(stuName.length);
        System.out.println("随机数为:" + a + ",姓名为:" + stuName[a]);
        return stuName[a];
    }

    // 读取班级名单存放到数组中
    public static String[] readclass(String localfile) {
        // 读取文件
        BufferedReader reader = null;
        try {
            reader = new BufferedReader(new FileReader(localfile));
        } catch (FileNotFoundException e) {

            e.printStackTrace();
        }
        // 直接写出读取容纳的学生人数:默认100
        String[] strs = new String[100];
        String line;
        int i = 0;
        try {
            while ((line = reader.readLine()) != null) {
                strs[i] = line;
                i++;
            }
        } catch (IOException e) {

            e.printStackTrace();
        }
        try {
            reader.close();
        } catch (IOException e) {

            e.printStackTrace();
        }
        int count = 0;
        for (String string : strs) {
            if (string != null) {
                count++;
            }
        }
        // 去掉空的才是最终的学生名单,采用copyOfRange方法
        String[] copyOfRange = Arrays.copyOfRange(strs, 0, count);
        return copyOfRange;
    }

}

List版本源码:

代码语言:javascript
复制
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;

/**
 * 简易版本随机点名器-List版本
 * @author lcry
 *
 */
public class RandomStudent2 {
    // 读取名单修改路径即可(txt文本文件,一行一个学生即可)
    public static String localurl = "H:\\class1.txt";

    // 程序入口
    public static void main(String[] args) throws Exception {
        RandomStudent2 rn = new RandomStudent2();
        rn.init();
    }

    // 主面板
    JFrame rFrame = new JFrame("简易随机点名器--By:Lcry");
    // 用于存储名字的标签
    JLabel name = new JLabel();
    // 按钮
    JButton btn = new JButton("点名");
    // 生成随机数
    Random rd = new Random();

    public void init() throws Exception {
        // 提示标签页面
        JLabel jt = new JLabel("随机点名器");
        // 设置标签居中
        jt.setHorizontalAlignment(SwingConstants.CENTER);
        // 设置字体大小
        jt.setFont(new Font("随机点名器", 1, 50));
        // 设置按钮大小
        btn.setPreferredSize(new Dimension(70, 39));
        // 设置名字显示的标签居中
        name.setHorizontalAlignment(SwingConstants.CENTER);
        // 通过匿名类实现Action按钮的监听事件
        btn.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // 获取随机的姓名
                String n;
                try {
                    n = getRandomName();
                    // 设置name标签的文字
                    name.setText(n);
                    // 设置字体
                    name.setFont(new Font(n, 1, 100));
                    // 设置字体颜色
                    name.setForeground(Color.red);
                } catch (Exception e1) {
                    e1.printStackTrace();
                }

            }

        });
        // 获取JFrame的面板
        Container p = this.rFrame.getContentPane();
        // 设置布局方式,我采用的BorderLayout布局
        p.setLayout(new BorderLayout(3, 1));
        // 添加提示标签在北方
        p.add(jt, BorderLayout.NORTH);
        // 添加姓名标签在中央
        p.add(name, BorderLayout.CENTER);
        // 添加按钮控件在南方
        p.add(btn, BorderLayout.SOUTH);
        // 调整大小,这个是java中无法设置标签的大小
        rFrame.pack();
        // 设置窗体大小
        rFrame.setSize(500, 500);
        // 设置可以显示
        rFrame.setVisible(true);

    }

    // 获取随机的姓名
    public String getRandomName() throws Exception {

        List readclass = readclass(localurl);
        int nextInt = rd.nextInt(readclass.size());
        System.out.println("随机数为:" + nextInt + ",姓名为:" + readclass.get(nextInt));
        String reString = (String) readclass.get(nextInt);
        return reString;

    }

    // 读取班级名单存放到list
    public static List readclass(String localfile) throws Exception {
        // 读取文件学生信息
        BufferedReader reader = new BufferedReader(new FileReader(localfile));
        List list = new ArrayList();
        String line;
        while ((line = reader.readLine()) != null) {
            list.add(line);
        }
        reader.close();
        return list;
    }

}

使用方法:

修改localurl为你名单.txt的路径,运行程序即可。 数组版本默认读取最大100个人,如果班级学生超过100人了自行修改数组readclass方法中的的数组长度即可。

运行截图:

Java 实现简易随机学生点名器(附源码)
Java 实现简易随机学生点名器(附源码)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-10-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数组版本源码:
  • List版本源码:
  • 使用方法:
  • 运行截图:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档