java基础-IO流(随机点名器)

第一问:

复制代码
package Day13_IO;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Random;

public class IOTest03 {
    public static void main(String[] args) throws IOException {
        //创建读取对象
        ArrayList<String> list=new ArrayList<>();
        BufferedReader br = new BufferedReader(new FileReader("E:\\java\\javase\\basic\\javadown\\test5.txt"));
        //每次读一行
        String s;
        while((s=br.readLine())!=null){
            list.add(s);
        }
        //随机读取数据
        Random random=new Random();
        int i = random.nextInt(list.size());
        String name = list.get(i).split("-")[0];
        System.out.println(name);
    }
}

第二问:

复制代码
package Day13_IO;

import java.io.*;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;

public class IOTest04 {
    public static void main(String[] args) throws IOException {
        //1、创建男生和女生集合
        ArrayList<String> boyList = new ArrayList<>();
        ArrayList<String> girlList = new ArrayList<>();
        BufferedReader br = new BufferedReader(new FileReader("E:\\java\\javase\\basic\\javadown\\test5.txt"));
        //把读取的数据分别存到男生集合和女生集合
        String line;
        while((line=br.readLine())!=null){
            if(line.split("-")[1].equals("男")){
                boyList.add(line);
            }else {
                girlList.add(line);
            }
        }
        //开始抽数
        int boyCount=0,girlCount=0;
        for (int i = 0; i < 1000000; i++) {
            Random random=new Random();
            int boyRandomNumber = random.nextInt(boyList.size());
            int girlRandomNumber = random.nextInt(girlList.size());
            int number = getNumber();
            if(number==1){
                boyList.get(boyRandomNumber);
                boyCount++;
            }else{
                girlList.get(girlRandomNumber);
                girlCount++;
            }
        }
        //循环完结束之后,计算boyCount和girlCount的占比

        double j = Math.round((girlCount * 100) / 1000000.0);
        double i = Math.round((boyCount * 100) / 1000000.0);
        System.out.println("男孩的概率 "+String.format("%.2f", i)+"%");
        System.out.println("女孩的概率 "+String.format("%.2f", j)+"%");


    }
    //定义一个方法,用来表示概率
    public static int getNumber(){
        ArrayList<Integer> number = new ArrayList<>();
        Collections.addAll(number,1,1,1,1,1,1,1,0,0,0);//1:男生,0:女生
        Random random = new Random();
        int i = random.nextInt(number.size());
        return number.get(i);
    }
}

第三问:

复制代码
package Day13_IO;

import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;

public class IOTest05 {
    public static void main(String[] args) throws IOException {
        //点名作弊器:程序执行三次后,必须点到张三
        //1、先读取姓名文件,存到集合中
        BufferedReader br = new BufferedReader(new FileReader("E:\\java\\javase\\basic\\javadown\\test5.txt"));
        ArrayList<String> nameList = new ArrayList<>();
        String str;
        while((str=br.readLine())!=null){
            nameList.add(str);
        }
        //2、读取存档文件
        BufferedReader br4 = new BufferedReader(new FileReader("E:\\java\\javase\\basic\\javadown\\test4.txt"));
        String s = br4.readLine();
        int number = Integer.parseInt(s);
        if(number==2){
            System.out.println("张三");
        }else{
            //3、随机读取姓名
            Collections.shuffle(nameList);
            System.out.println(nameList.get(0));
            number++;
            //写入到存档文件
            BufferedWriter bw = new BufferedWriter(new FileWriter("E:\\java\\javase\\basic\\javadown\\test4.txt"));
            bw.write(String.valueOf(number));
            bw.newLine();
            bw.close();
        }
        br.close();
        br4.close();
    }
}

第四问:

复制代码
package Day13_IO;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Random;

public class IOTest06 {
    public static void main(String[] args) throws IOException {
        //读取本地文件
        BufferedReader br = new BufferedReader(new FileReader("E:\\java\\javase\\basic\\javadown\\test5.txt"));
        ArrayList<String> nameList = new ArrayList<>();
        ArrayList<String> tempList = new ArrayList<>();
        //姓名数据写入到nameList
        String str;
        while((str=br.readLine())!=null){
            nameList.add(str);
        }
        int size = nameList.size();
        for (int i1 = 1; i1 < 11; i1++) {
            System.out.println("=========第"+i1+"轮=============");
            for (int i = 0; i < size; i++) {
                Random random = new Random();
                int j = random.nextInt(nameList.size());
                System.out.println(nameList.get(j));
                String remove = nameList.remove(j);
                tempList.add(remove);
            }
            nameList.addAll(tempList);
            tempList.clear();
        }
        br.close();
    }
}

第五问:

复制代码
package Day13_IO;

import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;

public class IOTest07 {
    public static void main(String[] args) throws IOException {
        //1、读取文件中的数据
        BufferedReader br = new BufferedReader(new FileReader("E:\\java\\javase\\basic\\javadown\\test5.txt"));
        //2、创建集合存储对象
        ArrayList<Student> students = new ArrayList<>();
        String line;
        while((line=br.readLine())!=null){
            String[] split = line.split("-");
            Integer age = Integer.parseInt(split[2]);
            Double weight = Double.parseDouble(split[3]);
            Student student = new Student(split[0], split[1], age, weight);
            students.add(student);
        }
        //3、计算总权重
        double weightSum=0;
        for (Student student : students) {
            weightSum+=student.getWeight();
        }
        //4、计算每个学生的占比,并存起来
        double[] arr=new double[students.size()];
        int i=0;
        for (Student student : students) {
            arr[i]=student.getWeight()/weightSum;
            i++;
        }

        //5、计算每一个人的权重占比范围
        //[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]
        //结果应该是{0.0~0.1,0.1~0.2,0.2~0.3,0.3~0.4,0.4~0.5,0.5~0.6,0.7~0.8,0.9~1.0}
        for (int j = 1; j < arr.length; j++) {
            arr[j]=arr[j]+arr[j-1];
        }
        System.out.println(Arrays.toString(arr));
        //6、随机抽取
        //获取一个0.0~1.0的随机数
        double number= Math.random();
        System.out.println(number);
        //二分查找法:Arrays.binarySearch
        //如果要查找的数据不存在,会返回负的插入点减一。比如返回了-4,那么就代表着要插入的位置是3索引的位置
        int index = Arrays.binarySearch(arr, number);
        int result=-index-1;//拿到实际的位置
        Student student = students.get(result);
        System.out.println(student);
        //获取到该学生的权重,并且修改权重,然后重新赋值给该学生
        student.setWeight(student.getWeight()/2);
        System.out.println(students);
        //7、把集合中的数据重新写到文件中
        BufferedWriter bw = new BufferedWriter(new FileWriter("E:\\java\\javase\\basic\\javadown\\test5.txt"));
        for (Student eachStudent : students) {
            String newResult = eachStudent.getName() +
                    "-" + eachStudent.getGender() +
                    "-" + eachStudent.getAge() +
                    "-" + eachStudent.getWeight();
            bw.write(newResult);
            bw.newLine();
        }
        bw.close();
        br.close();
    }
}
相关推荐
spencer_tseng1 小时前
Stream not available [SysDictDataMapper.xml]
xml·java
张3蜂1 小时前
Gunicorn深度解析:Python WSGI服务器的王者
服务器·python·gunicorn
蒸蒸yyyyzwd6 小时前
cpp对象模型学习笔记1.1-2.8
java·笔记·学习
睡美人的小仙女1276 小时前
Threejs加载环境贴图报错Bad File Format: bad initial token
开发语言·javascript·redis
程序员徐师兄7 小时前
Windows JDK11 下载安装教程,适合新手
java·windows·jdk11 下载安装·jdk11 下载教程
rayufo7 小时前
【工具】列出指定文件夹下所有的目录和文件
开发语言·前端·python
RANCE_atttackkk7 小时前
[Java]实现使用邮箱找回密码的功能
java·开发语言·前端·spring boot·intellij-idea·idea
缺点内向8 小时前
C#编程实战:如何为Word文档添加背景色或背景图片
开发语言·c#·自动化·word·.net
五岳8 小时前
DTS按业务场景批量迁移阿里云MySQL表实战(下):迁移管理平台设计与实现
java·应用·dts
一起养小猫8 小时前
Flutter for OpenHarmony 实战:记账应用数据统计与可视化
开发语言·jvm·数据库·flutter·信息可视化·harmonyos