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();
    }
}
相关推荐
Sam_Deep_Thinking2 分钟前
如何让订单系统和营销系统解耦
java·架构·系统架构
云泽8083 分钟前
C++11 核心特性全解:列表初始化、右值引用与移动语义实战
开发语言·c++
froginwe1121 分钟前
DOM 加载函数
开发语言
lzhdim23 分钟前
SQL 入门 12:SQL 视图:创建、修改与可更新视图
java·大数据·服务器·数据库·sql
Hello eveybody37 分钟前
介绍一下背包DP(Python)
开发语言·python·动态规划·dp·背包dp
2301_795099741 小时前
让 CSS Grid 自适应容器尺寸的动态布局方案
jvm·数据库·python
AI进化营-智能译站1 小时前
ROS2 C++开发系列12-用多态与虚函数构建可扩展的ROS2机器人行为模块
开发语言·c++·ai·机器人
呆萌的代Ma1 小时前
python读取并加载.env的配置文件
python
Muyuan19981 小时前
27.RAG 系统中的上下文充分性判断:从 Chunk 数量、FAISS 距离到 LLM Relevance Gate
python·django·pdf·fastapi·faiss
iCxhust1 小时前
微机原理实践教程(C语言篇)---A002流水灯
c语言·开发语言·单片机·嵌入式硬件·51单片机·课程设计·微机原理