1.课堂随机点名目的

利用java IntelliJ IDEA工具实现随机点名。

2.代码实现:

  1. 版本1.0
  2. 难点:随机函数的生成

java生成随机数有两种方法:

  1. 使用Math方法,Math.random()随机生成一个double类型[0,1)
  2. 使用Random方法生成随机数
random.nextInt(2)
import java.util.Random;
public class RandomRollCall_1 {
    // 版本 1.0
    // 说明:根据字符串数组存入同学姓名,利用随机函数进行随机点名
    public static void main(String[] args) {
        //使用字符串数组存入同学名单,假定第一位同学为1号。
        String[] list = {"王二","张三","李四"};
        // 建立一个产生随机数的对象。
        Random random = new Random();
        // 构建 数组长度范围内的随机整数  这里为 0-2
        int name = random.nextInt(list.length);
        // 利用 for 循环遍历数组,当随机数与数组下标匹配时,输出被抽同学
        for (int i = 0;i<list.length;i++){
            if(name == i){
                System.out.println("被抽中的同学是:" + (name+1) +"号,"+ list[name]+"同学");
            }
        }
    }
}
  1. 版本2.0
  2. 难点:文件的读入

(1) java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关

(2)File类中涉及到关于文件或文件目录的创建、删除、重命名、修改时间、文件大小等方法,并未涉及到写入或读取文件内容的操作。如果需要读取或写入文件内容,必须使用IO流来完成。

(3) 想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录。

(4) File对象可以作为参数传递给流的构造器,指明读取或写入的"终点"。

(5)绝对路径:是一个固定的路径,从盘符开始

(6)相对路径:是相对于某个位置开始

import java.util.Random;
import java.io.*;
public class RandomRollCall_2 {
    // 版本 2.0
    // 说明:根据字符串数组存入同学姓名,利用随机函数进行随机点名
    // 升级功能:从文件读入同学名单
    public static void main(String[] args)throws IOException {//throws是方法可能抛出异常的声明
        //String[] list = {"王二","张三","李四"};
        //File file = new File("E:\\Mycache\\JavaCourse\\JavaSE_Assignment\\测试名单.txt");
        File file = new File("test.txt");// 相对路径()
        if (file.exists()) {    // 判断文件是否存在
            BufferedReader r = new BufferedReader(new FileReader(file));//缓冲区读取内容,避免中文乱码
            int i = 0;
            String[] list = new String[4];
            while ((list[i] = r.readLine()) != null) {
                i++;
            }
            /** 关闭文件
             * 那么不关闭有什么后果呢?不关闭就造成文件描述符无法释放,属于一种系统文件的浪费
             * 不关闭可能造成对文件的写入丢失,写入有可能存在缓存区,没有关闭并且没有主动flush到具体的文件上,则可能造成丢失。
             * 如果该文件被文件锁独占,那么就会造成其他线程无法操作该文件。
             * */
            r.close();
//            for (String str : list) {
//                System.out.println(str);
//            }
            Random random = new Random();
//            int flag = 0;
//            while (flag < 10) {
//                int name = random.nextInt(3);
//                flag++;
//                System.out.println(name);
//            }
            int name = random.nextInt(3);
            for (int j = 0; j < list.length-1; j++) {   //利用 for 循环遍历数组,当随机数与数组下标匹配时,输出被抽同学
                if (name == j) {
                    System.out.println("被抽中的同学是:" + (name + 1) + "号," + list[name] + "同学");
                }
            }
        }else {
            System.out.println("文件不存在");
        }
    }
}
  1. 版本3.0
  2. 难点:GUI(图形化界面)的构建

1、java的图形用户界面的基本组成部分是组件。

2、组件不能独立显示出来,必须将组件放在容器中才能显示,容器可以容纳多个组件(调用容器的add方法)。

3、最常用的两个容器是窗口(Frame)和面板(Panel)。

JFrame() 创建新窗体,该窗体初始为不可见

JFrame(String title) 创建新窗体,使用参数title指定标题,该窗体初始为不可见

方法:

void setSize(int width, int height)//设置窗体大小

void setVisible(boolean b)//可视化

void setTitle(String title)//设置窗体标题

void setResizable(boolean resizable)//设置窗体大小是否可变

void setLocation(int x,int y)//设置窗体位置

void setLocationRelativeTo(null);//设置窗体在中间显示

void setDefaultCloseOperation(int operation)//设置关闭窗体后的操作

void dispose()//释放窗体


package InterestGroupWork1;

import javax.swing.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Random;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;


public class RandomRollCall_3 extends JFrame implements ActionListener {
    // 版本 3.0
    // 说明:根据字符串数组存入同学姓名,利用随机函数进行随机点名
    // 升级功能:1、从文件读入同学名单
    //          2、图形化界面

    // 主函数入口
    public static void main(String[] args) {//throws是方法可能抛出异常的声明
        RandomRollCall_3 r = new RandomRollCall_3();
        r.setVisible(true); // setVisible(boolean)方法是用来显示(true)/隐藏(false)GUI组件的
    }

    // 实例化
    private JPanel con = new JPanel();
    private JTextField input_text = new JTextField();
    private JButton c_Btn = new JButton("开始");

    public RandomRollCall_3() throws HeadlessException {
        init();
        addComponent();
    }

    public void addComponent() {    // 添加控件
        this.input_text.setPreferredSize(new Dimension(490, 80));//文本框大小
        this.c_Btn.setPreferredSize(new Dimension(100, 80));//按钮大小
        c_Btn.setFont(new Font("粗体", Font.BOLD, 30));    //按钮内文本格式

        Font font = new Font("楷体", Font.BOLD, 30);//文本框内文字格式
        this.input_text.setFont(font);

        this.c_Btn.setForeground(Color.RED);    //字体颜色
        con.add(input_text);
        con.add(c_Btn);

        c_Btn.addActionListener(new ActionListener() {//开始按钮的实现
            public void actionPerformed(ActionEvent e) {

                try {
                    input_text.setText(function());
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        });
        this.add(con, BorderLayout.CENTER);
    }

    public void actionPerformed(ActionEvent e) {

    }
    // 获取屏幕宽度
    public static final int SCREEN_W = Toolkit.getDefaultToolkit().getScreenSize().width;
    // 获取屏幕高度
    public static final int SCREEN_H = Toolkit.getDefaultToolkit().getScreenSize().height;

    public void init() {//初始化的方法
        this.setTitle("课堂随机点名");
        this.setSize(500, 300);

        this.setLayout(new BorderLayout());
        this.setResizable(false);
        this.setLocation((SCREEN_W - 500) / 2, (SCREEN_H - 300) / 2);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }


    public static String function() throws IOException {

        // String[] list = {"王二","张三","李四"};
        // File file = new File("E:\\Mycache\\JavaCourse\\JavaSE_Assignment\\测试名单.txt");

        File file = new File("test.txt");// 相对路径()
        if (file.exists()) {    // 判断文件是否存在
            BufferedReader r = new BufferedReader(new FileReader(file));//缓冲区读取内容,避免中文乱码
            int i = 0;
            String[] list = new String[4];
            while ((list[i] = r.readLine()) != null) { // 读取文件的一行将其存入list数组中
                i++;
            }
            /** 关闭文件
             * 那么不关闭有什么后果呢?不关闭就造成文件描述符无法释放,属于一种系统文件的浪费
             * 不关闭可能造成对文件的写入丢失,写入有可能存在缓存区,没有关闭并且没有主动flush到具体的文件上,则可能造成丢失。
             * 如果该文件被文件锁独占,那么就会造成其他线程无法操作该文件。
             * */
            r.close();
//            for (String str : list) {
//                System.out.println(str);
//            }
            Random random = new Random();
//            int flag = 0;
//            while (flag < 10) {
//                int name = random.nextInt(3);
//                flag++;
//                System.out.println(name);
//            }
            int name = random.nextInt(3);
            int j = 0;
            for (j = 0; j < list.length - 1; j++) {   //利用 for 循环遍历数组,当随机数与数组下标匹配时,输出被抽同学
                if (name == j) {
                    //System.out.println("被抽中的同学是:" + (name + 1) + "号," + list[j] + "同学");
                    break;
                }
            }
            return ("被抽中的同学是:" + (name + 1) + "号," + list[j] + "同学");
        }
        else {
            return "文件不存在";
        }

    }
}

总结