Java实现随机点名器的四种方式(第二种)

随机点名器2:在本地文件中读取数据并实现随机点名,附带点到男生的概率为70%,点到女生的概率为30%,运行100万次结束后统计点名的占比是否接近7:3,文件数据由好名网提供,爬取代码传送门:https://blog.csdn.net/qq_69957794/article/details/135118537?spm=1001.2014.3001.5502

文件也可自行写入,实现班级随机点名。

/*
* 需求:实现随机点名
*      从本地文件下读取数据实现随机点名
*      格式:XXX-男-23
*      运行效果:
*      第1次点名:XXX
*      第2次点名:XXX
*      第3次点名:XXX
*      男生与女生名字出现的比例为:7:3
* */
代码实现:
package RamdomRollCaller;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;

/*
* 需求:实现随机点名
*      从本地文件下读取数据实现随机点名
*      格式:XXX-男-23
*      运行效果:
*      第1次点名:XXX
*      第2次点名:XXX
*      第3次点名:XXX
*      男生与女生名字出现的比例为:7:3
* */
public class RollCallerDemo2 {
    public static void main(String[] args) throws IOException {
        //创建对象关联本地文件
        BufferedReader br = new BufferedReader(new FileReader("name.txt"));
        //创建集合用来存储临时数据
        ArrayList<String> tempNameList = new ArrayList<>();
        String str = "";
        while ((str = br.readLine()) != null) {
            tempNameList.add(str);
        }
        //关流
        br.close();
        //存储男生名字
        ArrayList<String> boyList = new ArrayList<>();
        //存储女生名字
        ArrayList<String> girlList = new ArrayList<>();
        for (String s : tempNameList) {
            String[] arr = s.split("-");
            if (arr[1].equals("男")) {
                boyList.add(s);
            } else {
                girlList.add(s);
            }
        }
        //创建比重集合0表示女生,1表示男生
        ArrayList<Integer> weight = new ArrayList<>();
        Collections.addAll(weight, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1);
        //随机点名
        Random r = new Random();
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入点名同学个数:");
        String tempCount = sc.nextLine();
        int count = Integer.parseInt(tempCount);
        //统计男生名字出现次数
        int boyCount = 0;
        //统计女生名字出现次数
        int girlCount = 0;
        int counter = 0;
        while (count-- != 0) {
            counter ++;
            int number = r.nextInt(10);
            int index = weight.get(number);
            if (index == 0) {
                Collections.shuffle(girlList);
                String[] arr = girlList.get(0).split("-");
                System.out.println("第"+counter+"次点名:"+arr[0]);
                girlCount++;
            } else {
                Collections.shuffle(boyList);
                String[] arr = boyList.get(0).split("-");
                System.out.println("第"+counter+"次点名:"+arr[0]);
                boyCount++;
            }
        }
        System.out.println("男生与女生名字出现比例为:"+boyCount+":"+girlCount);
    }
}

运行结果:

随机点名器实现方式第三种:https://blog.csdn.net/qq_69957794/article/details/135167702?spm=1001.2014.3001.5502

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

i的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值