随机点名器
练习1

package lx;import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;/*需求:需求:有一个文件里面存储了班级同学的信息,每一个信息占一行。格式为:张三-男-23要求通过程序实现随机点名器。运行效果:第一次运行程序:随机同学姓名1(只显示名字)第二次运行程序:随机同学姓名2(只显示名字)第三次运行程序:随机同学姓名3(只显示名字)…*/
public class demo3 {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new FileReader("names.txt"));//创建集合存储读取的数据ArrayList<String> list = new ArrayList<>();String line;while ((line = br.readLine()) != null) {list.add(line);}br.close();//2.随机抽取(解法二)Collections.shuffle(list);String randomName2 = list.get(0);String[] arr2 = randomName2.split("-");System.out.println(arr2[0]);}
}
练习2

package lx;import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;public class demo4 {/*需求:一个文件里面存储了班级同学的信息,格式为:张三-男-23每一个学生信息占一行。要求通过程序实现随机点名器。70%的概率随机到男生30%的概率随机到女生随机100万次,统计结果。看生成男生和女生的比例是不是接近于7:3*/public static void main(String[] args) throws IOException {//1.读取数据,并把男生和女生的信息添加到不同的集合当中ArrayList<String> boyNameList = new ArrayList<>();ArrayList<String> girlNameList = new ArrayList<>();BufferedReader br = new BufferedReader(new FileReader("names.txt"));String line;while ((line = br.readLine()) != null) {String[] arr = line.split("-");if (arr[1].equals("男")) {boyNameList.add(line);} else {girlNameList.add(line);}}br.close();//2.定义权重集合,男女比例:7:3ArrayList<Integer> list = new ArrayList<>();Collections.addAll(list,1,1,1,1,1,1,1,0,0,0);//打乱集合顺序Collections.shuffle(list);//3.定义变量,统计被点到的次数int boyCount = 0;int girlCount = 0;//随机在集合里抽取一个数,通过这个数是0还是1判断男女Random r = new Random();for (int i = 0; i < 1000000; i++) {int index = r.nextInt(list.size());int number = list.get(index);//判断number是1还是0if( number == 1){//是男生//随机一下男生集合的元素int boy = r.nextInt(boyNameList.size());System.out.println(boyNameList.get(boy));boyCount++;}else{//0就随机女生int girl = r.nextInt(girlNameList.size());System.out.println(girlNameList.get(girl));girlCount++;}}System.out.println("随机抽取100万次,其中男生被抽到了" + boyCount);System.out.println("随机抽取100万次,其中女生被抽到了" + girlCount);}
}
练习3

package lx;import java.io.*;
import java.util.ArrayList;
import java.util.Collections;/*需求:一个文件里面存储了班级同学的姓名,每一个姓名占一行。要求通过程序实现随机点名器。第三次必定是张三同学运行效果:第一次运行程序:随机同学姓名1第二次运行程序:随机同学姓名2第三次运行程序:张三…*/
public class demo6 {public static void main(String[] args) throws IOException {BufferedReader br1 = new BufferedReader(new FileReader("names.txt"));String line;//创建集合存储读取的数据ArrayList<String> list = new ArrayList<>();while ((line = br1.readLine()) != null) {list.add(line);}br1.close();//2.读取当前程序已经运行的次数BufferedReader br2 = new BufferedReader(new FileReader("count.txt"));String str = br2.readLine();int count = Integer.parseInt(str);//软件再运行一次count++count++;/* if (count <= 2) {System.out.println(list.get(count));}*///现在list集合里面存的是比如张三-男-18这样的格式//我们要以-为分割获取0索引的姓名if (count == 3) {System.out.println("张三");} else {//随机抽取//打乱集合的数据Collections.shuffle(list);String randomName2 = list.get(0);String[] arr2 = randomName2.split("-");System.out.println(arr2[0]);}//把自增的count写到本地文件当中 ,方便下次br2读取数据的时候,count的值有变化BufferedWriter bw = new BufferedWriter(new FileWriter("count.txt"));bw.write(count + "");bw.close();}
}
练习4

package lx;import java.io.*;
import java.util.ArrayList;
import java.util.Collections;/*需求:一个文件里面存储了班级同学的姓名,每一个姓名占一行。要求通过程序实现随机点名器。运行结果要求:被点到的学生不会再被点到。但是如果班级中所有的学生都点完了, 需要重新开启第二轮点名。核心思想:点一个删一个,把删除的备份,全部点完时还原数据。*/
public class demo8 {public static void main(String[] args) throws IOException {//1.定义变量,表示初始文件路径,文件中存储所有的学生信息String src = "allnames.txt";//2.定义变量,表示备份文件,一开始文件为空String copy = "copy.txt";//3.读取初始文件中的数据,并把学生信息添加到集合当中ArrayList<String> list = readFile(src);//4.判断集合中是否有数据if (list.size() == 0) {//5.如果没有数据了,表示所有的学生点完了,从copy.txt中把数据给allnames.txt即可//传给allnames.txt如下//5.1 读取copy.txt中的所有数据list = readFile(copy);//5.2 把读出来的数据写入allnames.txt(初始化文本当中)writeFile(list, src, false);//5.3 清空 copy文件中的数据FileWriter fw = new FileWriter(copy);fw.write(" ");fw.close();}//5.集合中有数据,表示还没有点完,随机一个删一个,把删除的备份到copy.txt当中//打乱集合Collections.shuffle(list);//获取0索引的学生信息并删除String stuInfo = list.remove(0);//打印随机到的学生信息System.out.println("当前被点到的学生为:" + stuInfo);//把随机出来的学生信息(除了被删除的,把list集合中的数据全部)写入allnames.txt当中//此时的list集合的数据随一个少一个System.out.println("还剩下" + list.size() + "个学生");//刷新allnames.txt中的学生信息writeFile(list, src, false);//把删除的学生写到copy.txt文件当中,追加写入,随一个写一个writeFile(stuInfo, copy, true);}private static void writeFile(String stuInfo, String copy, boolean b) throws IOException {BufferedWriter bw = new BufferedWriter(new FileWriter(copy, b));bw.write(stuInfo);bw.newLine();bw.close();}//定义方法,把所有学生信息写入到文初始化文件(allnames.txt)中private static void writeFile(ArrayList<String> list, String src, boolean b) throws IOException {BufferedWriter bw = new BufferedWriter(new FileWriter(src, b));//list这个集合存储了copy.txt的数据,也就是所有学生信息for (String s : list) {bw.write(s);bw.newLine();}bw.close();}//定义方法,把读取出来的学生信息添加到集合当中private static ArrayList<String> readFile(String src) throws IOException {//创建一个字符流BufferedReader br = new BufferedReader(new FileReader(src));//创建一个集合存储读到数据ArrayList<String> list = new ArrayList<>();String line;while ((line = br.readLine()) != null) {list.add(line);}return list;}
}
练习5

首先初始化文本信息



package lx;import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;public class demo10 {public static void main(String[] args) throws IOException {//1.读取文件中的数据,添加到集合当中ArrayList<Student> list = new ArrayList<>();BufferedReader br = new BufferedReader(new FileReader("..\\day51\\src\\lx\\names.txt"));String line;while ((line = br.readLine()) != null) {//现在我们把钦逸抒-女-21-1.0文件中的学生信息 以-分割//其实0索引是姓氏,1索引是性别,2索引是年龄,3索引是权重String[] arr = line.split("-");//把这些索引对应的信息赋给学生的属性Student stu = new Student(arr[0], arr[1], Integer.parseInt(arr[2]), Double.parseDouble(arr[3]));list.add(stu);}br.close();//2.计算出所有学生总权重double sum=0;for (Student student : list) {sum+=student.getWeight();}System.out.println("总权重为"+sum);//3.计算每一个学生的实际占比double[]arr=new double[list.size()];for (int i = 0; i < list.size(); i++) {arr[i]=list.get(i).getWeight()/sum;}// System.out.println(Arrays.toString(arr));//[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]//4.计算每一个学生的权重占比范围//每一个学生的权重占比范围是0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0之间//每一个学生的实际占比是 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1//怎么得到权重占比范围呢?//从第一位索引开始 本索引的权重占比是上一个索引的权重占比+当前索引的权重占比for (int i = 1; i < arr.length; i++) {arr[i]=arr[i]+arr[i-1];}System.out.println(Arrays.toString(arr));//5.随机生成一个0-1之间的数,判断这个数在哪个区间,就返回对应的索引double number = Math.random();//采用二分查找方法//该方法返回 -插入点-1//插入点=-结果-1int result = -Arrays.binarySearch(arr, number)-1;System.out.println("随机数:"+number);System.out.println("插入索引"+result);//6.返回对应的索引对应的学生信息Student stu = list.get(result);System.out.println("学生信息:"+stu);//7.修改当前学生的权重double w=stu.getWeight()/2;stu.setWeight(w);System.out.println("修改后的学生信息:"+stu);//8.写到本地文件当中BufferedWriter bw=new BufferedWriter( new FileWriter("..\\day51\\src\\lx\\names.txt"));for (Student s : list) {//s代表集合里的每一位学生对象//把学生信息写到本地文件当中bw.write(s.toString());bw.newLine();}bw.close();}
}

相关文章:
随机点名器
练习1 package lx;import java.io.*; import java.util.ArrayList; import java.util.Collections; import java.util.Random;/*需求:需求:有一个文件里面存储了班级同学的信息,每一个信息占一行。格式为:张三-男-23要求通过程序…...
添加动态云层
<template> <div class"topbox"> xx卫星管理 </div> <div class"selectbox"> <div class"title"> 卫星列表 </div> <el-table :data"tableData" style"width: 100%;height:230px;" …...
Spring Boot组成的分布式系统中实现日志跟踪
Spring Boot组成的分布式系统中实现日志跟踪 首发2024-07-25 08:54潘多编程 在分布式系统中,日志跟踪是一项非常重要的功能,它帮助开发者了解请求在整个系统中的流转过程,这对于调试、监控和故障排查至关重要。Spring Boot应用通常作为微服…...
GPT-4o Mini 模型的性能与成本优势全解析
GPT-4o Mini 模型的性能与成本优势全解析 📈 🌟 GPT-4o Mini 模型的性能与成本优势全解析 📈摘要引言正文内容GPT-4o Mini 模型简介 🚀性能测试与对比 📊应用场景 🌐自然语言处理对话系统内容生成 ✍️ &am…...
web前端 - HTML 基础知识大揭秘
HTML 大揭秘 什么是 HTML HTML(Hyper Text Markup Language),中文译为超文本标记语言。其中,我们需要注意两个关键词。一个是 超文本,一个是 标记。所谓超文本,就是将不同空间的文字信息通过超链接的方式…...
HTML meta
<meta>标签用于提供html文档的元信息(metadata)。这些信息不会显示在页面上,但会被浏览器或搜索引擎用来识别页面的编码方式、关键字、描述、作者信息、刷新时间等。 基本语法 <meta name"属性名" content"属性值&q…...
【学习笔记】子集DP
背景 有一类问题和子集有关。 给你一个集合 S S S,令 T T T 为 S S S 的超集,也就是 S S S 所有子集的集合,求 T T T 中所有元素的和。 暴力1 先预处理子集的元素和 A i A_i Ai,再枚举子集。 for(int s0; s<(1<…...
苦学Opencv的第十四天:人脸检测和人脸识别
Python OpenCV入门到精通学习日记:人脸检测和人脸识别 前言 经过了十三天的不懈努力,我们终于也是来到了人脸检测和人脸识别啦!相信大家也很激动吧。接下来我们开始吧! 人脸识别是基于人的脸部特征信息进行身份识别的一种生物识…...
PyTorch学习(1)
PyTorch学习(1) CIFAR-10数据集-图像分类 数据集来源是官方提供的: torchvision.datasets.CIFAR10()共有十类物品,需要用CNN实现图像分类问题。 代码如下:(CIFAR_10_Classifier_Self_1.py) import torch import t…...
三思而后行:计算机行业的决策智慧
在计算机行业,"三思而后行"这一原则显得尤为重要。在这个快速发展、技术不断更新换代的领域,每一个决策都可能对项目的成功与否产生深远的影响。以下是一篇关于在计算机行业中三思重要性的文章。 三思而后行:计算机行业的决策智慧 …...
Linux--Socket编程UDP
前文:Socket套接字编程 UDP协议特点 无连接:UDP在发送数据之前不需要建立连接,减少了开销和发送数据之前的时延。尽最大努力交付:UDP不保证可靠交付,主机不需要维持复杂的连接状态表。面向报文:UDP对应用层…...
《javaEE篇》--单例模式详解
目录 单例模式 饿汉模式 懒汉模式 懒汉模式(优化) 指令重排序 总结 单例模式 单例模式属于一种设计模式,设计模式就好比是一种固定代码套路类似于棋谱,是由前人总结并且记录下来我们可以直接使用的代码设计思路。 单例模式就是,在有…...
Java核心 - Lambda表达式详解与应用示例
作者:逍遥Sean 简介:一个主修Java的Web网站\游戏服务器后端开发者 主页:https://blog.csdn.net/Ureliable 觉得博主文章不错的话,可以三连支持一下~ 如有疑问和建议,请私信或评论留言! 前言 Lambda表达式是…...
算法通关:006_1二分查找
二分查找 查找一个数组里面是否存在num主要代码运行结果 详细写法自动生成数组和num,利用对数器查看二分代码是否正确 查找一个数组里面是否存在num 主要代码 /*** Author: ggdpzhk* CreateTime: 2024-07-27*/ public class cg {//二分查找public static boolean …...
总结一些vue3小知识3
总结一些vue3小知识1:http://t.csdnimg.cn/C5vER 总结一些vue3小知识2:http://t.csdnimg.cn/sscid 1.限制时间选择器只能选择后面的日期 说明:disabled-date属性是一个用来判断该日期是否被禁用的函数,接受一个 Date 对象作为参…...
JAVAWeb实战(前端篇)
项目实战一 0.项目结构 1.创建vue3项目,并导入所需的依赖 npm install vue-router npm install axios npm install pinia npm install vue 2.定义路由,axios,pinia相关的对象 文件(.js) 2.1路由(.js) import {cre…...
axios请求大全
本文讲解axios封装方式以及针对各种后台接口的请求方式 axios的介绍和基础配置可以看这个文档: 起步 | Axios中文文档 | Axios中文网 axios的封装 axios封装的重点有三个,一是设置全局config,比如请求的基础路径,超时时间等,第二点是在每次…...
C# 简单的单元测试
文章目录 前言参考文档新建控制台项目新建测试项目添加引用添加测试方法测试结果(有错误)测试结果,通过正规的方法抛出异常 总结 前言 听说复杂的项目最好都要单元测试一下。我这里也试试单元测试这个功能。到时候调试起来也方便。 参考文档 C# 单元测试…...
Linux中Mysql5.7主从架构(一主多从)配置教程
🏡作者主页:点击! 🐧Linux基础知识(初学):点击! 🐧Linux高级管理防护和群集专栏:点击! 🔐Linux中firewalld防火墙:点击! ⏰️创作…...
BACnet物联网关BL103:Modbus协议转BACnet/MSTP
随着物联网技术在楼宇自动化与暖通控制系统中的迅猛发展,构建一种既经济高效又高度可靠的协议转换物联网关成为了不可或缺的核心硬件组件。在此背景下,我们钡铼特别推荐一款主流的BAS(楼宇自动化系统)与BACnet物联网关——BL103&a…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
