IO练习--随机点名

news2024/11/13 13:01:16
随机点名器1

需求:
有一个文件里面存储了班级同学的信息,每一个信息占一行。
格式为:张三-男-23
要求通过程序实现随机点名器。
运行效果:
第一次运行程序:随机同学姓名1(只显示名字)
第二次运行程序:随机同学姓名2(只显示名字)
第三次运行程序:随机同学姓名3(只显示名字) 

public class Tset {
    public static void main(String[] args) throws IOException {
        //把文件中的学生全部读取出来放到集合中
        ArrayList<String> list = new ArrayList<>();
        //使用缓冲流读,因为可以一次读取一行
        BufferedReader br = new BufferedReader(new FileReader("name.txt"));
        String info;
        while ((info = br.readLine()) != null) {
            list.add(info);
        }
        //随机选取一个元素并获取名字
        Collections.shuffle(list);
        String name = list.get(0).split("-")[0];
        //读取程序运行的次数
        FileInputStream fis = new FileInputStream("count.txt");
        int count = fis.read();
        count = count + 1;
        System.out.println("第" + (char)count +"次运行程序:" + name);
        //将程序的运行次数记录下来
        //当文件不存在时会先创建文件
        FileOutputStream fos = new FileOutputStream("count.txt");
        fos.write(count);
    }
}
随机点名器2--带概率的随机

需求:
一个文件里面存储了班级同学的信息,每一个学生信息占一行。
格式为:张三-男-23。
要求通过程序实现随机点名器
运行效果:
70%的概率随机到男生
30%的概率随机到女生
点击并拖拽以移动
总共随机100万次,统计结果,
注意观察:看生成男生和女生的比例是不是接近于7:3

public class Test02 {
    public static void main(String[] args) throws IOException {
        //首先把文件中的内容读取到集合中,男女分开存
        ArrayList<String> boyList = new ArrayList<>();
        ArrayList<String> girlList = new ArrayList<>();
        BufferedReader br = new BufferedReader(new FileReader("name.txt"));
        String info;
        while ((info = br.readLine()) != null) {
            String gender = info.split("-")[1];
            if (gender.equals("男")) {
                boyList.add(info);
            }
            if (gender.equals("女")) {
                girlList.add(info);
            }
        }
        //模拟概率
        ArrayList<Integer> plist = new ArrayList<>();
        Collections.addAll(plist, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0);
        int boyCount = 0;
        int girlCount = 0;
        //循环一百万次
        for (int i = 0; i < 1000000; i++) {
            Collections.shuffle(plist);
            int number = plist.get(0);
            if (number == 1) {
                Collections.shuffle(boyList);
                String boyInfo = boyList.get(0);
                boyCount++;
            } else {
                Collections.shuffle(girlList);
                String girlInfo = girlList.get(0);
                girlCount++;
            }
        }
        //统计概率
        double p1 = (double) boyCount / 1000000;
        double p2 = (double) girlCount / 1000000;
        System.out.println(p1);
        System.out.println(p2);
    }
}

输出结果:

随机点名器3

需求:
一个文件里面存储了班级同学的姓名,每一个姓名占一行。
要求通过程序实现随机点名器。
第三次必定是张三同学
运行效果:
第一次运行程序:随机同学姓名1第二次运行程序:随机同学姓名2
第三次运行程序:张三

由于读取返回的是字符所对应的ASCII码点,无法直接与整数1,2...进行比较。

当有一个char类型的字符c,想要判断字符内容是否为2时,可这样比较:c == '2'。

代码如下:

public class Test03 {
    public static void main(String[] args) throws IOException {
        //把文件中的学生全部读取出来放到集合中
        ArrayList<String> list = new ArrayList<>();
        //使用缓冲流读,因为可以一次读取一行
        BufferedReader br = new BufferedReader(new FileReader("name.txt"));
        String info;
        while ((info = br.readLine()) != null) {
            list.add(info);
        }
        //读取程序运行的次数
        FileInputStream fis = new FileInputStream("count.txt");
        int count = fis.read();
        if (count == '2') {
            count = count + 1;
            System.out.println("第" + (char)count +"次运行程序:张三");
        } else {
            //随机选取一个元素并获取名字
            Collections.shuffle(list);
            String name = list.get(0).split("-")[0];
            count = count + 1;
            System.out.println("第" + (char)count +"次运行程序:" + name);
        }
        //将程序的运行次数记录下来
        //当文件不存在时会先创建文件
        FileOutputStream fos = new FileOutputStream("count.txt");
        fos.write(count);
    }
}

运行结果: 

随机点名器4--随机不重复

需求:
一个文件里面存储了班级同学的姓名,每一个姓名占一行,要求通过程序实现随机点名器。
运行效果:
被点到的学生不会再被点到
如果班级中所有的学生都点完了,需要自动的重新开启第二轮点名
细节1:假设班级有10个学生,每一轮中每个人只能被点到一次,程序运行10次,第一轮结束;

细节2:第11次运行的时候,我们自己不需要手动操作本地文件,要求程序自动开始第二轮点名。

首先来实现第一轮点名的代码:

保证抽过的不会再被抽到,可以用remove方法实现。

注意:

remove方法有两个,分别是根据索引和根据内容删除,内容的话方法的返回结果是布尔类型,而索引会把删除的元素进行返回。

        //一个班级里的10个学生
        ArrayList<String> list = new ArrayList<>();
        BufferedReader br = new BufferedReader(new FileReader("name_10.txt"));
        String info;
        while ((info = br.readLine()) != null) {
            list.add(info);
        }
        br.close();

        //随机选取一个元素并获取名字
        Collections.shuffle(list);
        String name = list.remove(0).split("-")[0];
        System.out.println(name);
        //更新文件中的名单
        BufferedWriter bw1 = new BufferedWriter(new FileWriter("name_10.txt"));
        for (String s : list) {
            bw1.write(s);
            bw1.newLine();
        }
        bw1.close();

        //将点到的人存到新的文件中
        BufferedWriter bw2 = new BufferedWriter(new FileWriter("callover.txt", true));
        bw2.write(name);
        bw2.newLine();
        bw2.close();

完整的代码:

当一轮点名结束时要恢复原来的名单。

public class Test04 {
    public static void main(String[] args) throws IOException {
        //首先读取文件中的内容
        ArrayList<String> list = readFile();
        //
        if (list.isEmpty())       {
            copyFile();
            list = readFile();
            String name = callOver(list);
            writeFile(name);
        } else {
            String name = callOver(list);
            writeFile(name);
        }
    }

    private static void writeFile(String name) throws IOException {
        //将点到的人存到新的文件中
        BufferedWriter bw2 = new BufferedWriter(new FileWriter("callover.txt", true));
        bw2.write(name);
        bw2.newLine();
        bw2.close();
    }

    private static String callOver(ArrayList<String> list) throws IOException {
        //随机选取一个元素并获取名字
        Collections.shuffle(list);
        String name = list.remove(0).split("-")[0];
        System.out.println(name);
        //更新文件中的名单
        BufferedWriter bw1 = new BufferedWriter(new FileWriter("name_10.txt"));
        for (String s : list) {
            bw1.write(s);
            bw1.newLine();
        }
        bw1.close();
        return name;
    }

    private static ArrayList<String> readFile() throws IOException {
        //一个班级里的10个学生
        ArrayList<String> list = new ArrayList<>();
        BufferedReader br = new BufferedReader(new FileReader("name_10.txt"));
        String info;
        while ((info = br.readLine()) != null) {
            list.add(info);
        }
        br.close();
        return list;
    }

    public static void copyFile() throws IOException {
        FileInputStream fis = new FileInputStream("callover.txt");
        FileOutputStream fos = new FileOutputStream("name_10.txt");
        int b;
        while ((b = fis.read()) != -1) {
            fos.write(b);
        }
        fos.close();
        fis.close();
        new File("callover.txt").delete();
    }
}

可以再修改一下: 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2092687.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数学建模强化宝典(2)linprog

一、介绍 linprog 是 MATLAB 中用于解决线性规划问题的函数。线性规划是一种优化方法&#xff0c;它尝试在满足一组线性等式或不等式约束的条件下&#xff0c;找到一个线性目标函数的最大值或最小值。linprog 函数适用于求解形如以下问题的线性规划问题&#xff1a; minimizecT…

Native开发与逆向第六篇 -字符串加密与hook

开发demo 写一个简单的字符串加密处理&#xff0c;将字符串字符转成ASCII十六进制值 std::string StrToHex(std::string str){unsigned char c;char buf[3];std::string result "";std::stringstream ss;ss << str;while (ss.read((char *)(&c), sizeof…

Python数据类型转换背后的逻辑

文末赠免费精品编程资料~~ 今天让我们深入浅出地探索Python数据类型转换的奥秘。Python&#xff0c;作为一门灵活的编程语言&#xff0c;其强大的数据类型转换能力是日常编码中不可或缺的一部分。今天&#xff0c;我们将一步步揭开类型转换背后的逻辑&#xff0c;让你从新手进…

【wsl2】从C盘迁移到G盘

参考大神 C盘的ubuntu22.04 非常大&#xff0c;高达30g 迁移后就只有几百M了&#xff1a; 右键有一个move没有敢尝试 迁移过程 Windows PowerShell Copyright (C) Microsoft Corporation. All rights reserved.Install the latest PowerShell for new features and improveme…

HCCL集合通信算法开发Hello World示例(超详细)

本文给读者介绍了HCCL算法开发所涉及的概念和流程&#xff0c;并通过一个样例将前文介绍的内容串联起来。本文定位为HCCL算法开发的入门介绍&#xff0c;读者读完后&#xff0c;可结合HCCL开放代码仓中的算法样例&#xff0c;做深入研究。 1 什么是集合通信 集合通信定义了一…

Http的get请求中的URL中的占位符参数和查询参数有什么区别

Http的GET请求中的URL中的占位符参数和查询参数在功能、位置和用途上存在明显的区别。 占位符参数&#xff08;Path Variables&#xff09; 定义与位置&#xff1a;占位符参数是通过URL模板中的{}定义的&#xff0c;它们位于URL的路径&#xff08;path&#xff09;部分。例如…

C#文件的输入和输出

一个文件是一个存储在磁盘中带有指定名称和目录路径的数据集合.当打开文件进行读写时,它变成一个流.从根本上说,流是通过通信路径传递的字节序列.有两个主要的流:输入流和输出流.输入流用于从文件读取数据,输出流用于向文件写入数据. C#I/O类 System.IO命名空间有各种不同的类…

带权重的随机算法

假设有10名学生&#xff0c;其中5个男生&#xff0c;5个女生。 要求点到男生的概率为70%&#xff0c;女生的概率为30%。 给男生和女生设置权重&#xff0c;其中男生权重为7&#xff0c;女生权重为3。 public class Test02_case2 {public static void main(String[] args) th…

Expected expression after operator

这个错误直译过来就是:运算符号后没有预期的表达式 这个错误通常出现在编程语言中&#xff0c;尤其是在编写C或C等类型语言的时候&#xff0c;它意味着在源代码中遇到了一个操作符&#xff08;比如 , -, *, /, , 等等&#xff09;&#xff0c;但在该操作符后面没有紧跟相应的表…

【最新华为OD机试E卷】最大利润-贪心的商人(100分)-多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-E/D卷的三语言AC题解 💻 ACM金牌🏅️团队| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,…

Dolphinscheduler 3.2.0版本参数传递并使用switch任务进行判断

原文阅读&#xff1a;【巨人肩膀社区博客分享】3.2.0版本参数传递并使用switch任务进行判断 目标&#xff1a;根据日期判断执行哪项子任务 &#xfeff; 调度器版本&#xff1a;3.2.0 在这个版本中官方支持的参数传递任务类型有6中&#xff0c;分别为shell,sql,procedure,py…

网络压缩之网络剪枝(network pruning)

网络剪枝&#xff08;network pruning&#xff09;就是要把网络里面的一些参数剪掉。剪枝就是修剪的意思&#xff0c;把网络里面的一些参数剪掉。为什么可以把网络里面的一些参数剪 掉呢&#xff1f;这么大的网络里面有很多很多的参数&#xff0c;每一个参数不一定都有在做事。…

AcWing 897. 最长公共子序列

动态规划就是多见识应用题就完事儿了&#xff0c;也没有什么好说的。 讲解参考&#xff1a; 【E05 线性DP 最长公共子序列】 #include<iostream> #include<algorithm> #define N 1010 using namespace std; char a[N],b[N]; int n,m; int f[N][N]; int main(){…

欧拉 函数

互质&#xff1a; 互质是公约数只有1的两个整数&#xff0c;叫做互质整数。公约数只有1的两个自然数&#xff0c;叫做互质自然数&#xff0c;后者是前者特殊情况。 &#xff08;1和-1与所有整数互质&#xff0c;而且它们是唯一与0互质的整数&#xff09; 互质的判断方法&…

微信公众号文章导出工具 100%还原原文样式:wechat-article-exporter

wechat-article-exporter是一款微信公众号文章导出工具&#xff0c;能够100%还原原文样式&#xff0c;工具受 WeChat_Article 项目的启发所写&#xff0c;目前支持 搜索公众号和公众号内文章&#xff0c;导出文章为包含图片和样式文件的HTML格式&#xff08; (打包了图片和样式…

中仕公考:这样备考,你天生就是公务员!

根据上岸学员的反馈&#xff0c;小编发现了一些共通点&#xff0c;无论是在职备考还是全职备考&#xff0c;只要做到以下几点&#xff0c;不上岸那是不可能的! 1. 作息规律&#xff0c;早起不熬大夜。每天按时早起&#xff0c;挤出时间用来学习&#xff0c;晚上不熬夜学习到很…

Windows编程系列:PE文件结构

Windows编程系列&#xff1a;PE文件结构 PE文件结构 Portable Executable (PE)&#xff0c;可移植的可执行文件。在Windows平台下&#xff0c;所有的可执行文件&#xff08;包括.exe, .dll, .sys, .ocx, .com等&#xff09;均使用PE文件结构。这些使用了PE文件结构的可执行文…

HarmonyOS开发实战( Beta5版)应用性能工具CPU Profiler的使用规范

简介 本文档介绍应用性能分析工具CPU Profiler的使用方法&#xff0c;该工具为开发者提供性能采样分析手段&#xff0c;可在不插桩情况下获取调用栈上各层函数的执行时间&#xff0c;并展示在时间轴上。 开发者可通过该工具查看TS/JS代码及NAPI代码执行过程中的时序及耗时情况…

Web-gpt

AJAX AJAX&#xff08;Asynchronous JavaScript and XML&#xff0c;异步JavaScript和XML&#xff09;是一种用于创建动态网页应用的技术。它允许网页在不重新加载整个页面的情况下&#xff0c;异步地从服务器请求数据&#xff0c;并将这些数据更新到网页上。这提高了用户体验…

HarmonyOS开发实战( Beta5版)小程序场景性能优化开发指导

简介 小程序是一种轻量级的应用&#xff0c;它不需要下载、安装即可使用&#xff0c;用户可以通过扫描二维码或者搜索直接打开使用。小程序运行在特定的平台上&#xff0c;平台提供了小程序的运行环境&#xff08;运行容器&#xff09;和一些基础服务&#xff08;小程序API&am…