1.班级有n个学生,实现随机点名器
package a03Test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
public class Test1 {
public static void main(String[] args) {
//1.定义集合
ArrayList<String> list=new ArrayList<>();
//2.添加数据
Collections.addAll(list,"蒋丞","顾飞","盛望","江添","谢俞","贺朝","喻繁","陈景深","简松意","柏淮");
//3.随机点名
//方法1:
/*Random r=new Random();
int index = r.nextInt(list.size());
String name = list.get(index);
System.out.println(name);
*/
//方法2:
Collections.shuffle(list);//打乱了所以获取0索引的数据就是随机的
String name = list.get(0);
System.out.println(name);
}
}
运行结果:
2.要求:70%的概率随机到男生,30%的概率随机到女生
package a03Test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
public class Test2 {
public static void main(String[] args) {
//1.创建集合
ArrayList<Integer> list=new ArrayList<>();
//2.添加数据
Collections.addAll(list,1,1,1,1,1,1,1);
Collections.addAll(list,0,0,0);
//3.打乱集合中的数据
Collections.shuffle(list);
//4.从list集合中随机抽取0或1
Random r=new Random();
int index = r.nextInt(list.size());
int number = list.get(index);
System.out.println(number);
//5.创建两个集合存储男生和女生的名字
ArrayList<String> boyList=new ArrayList<>();
ArrayList<String> girlList=new ArrayList<>();
Collections.addAll(boyList,"男一","男二","男三","男四","男五","男六","男七","男八","男九","男十");
Collections.addAll(girlList,"女一","女二","女三","女四","女五");
//6.此时从boyList里面取还是从girlList里面取
if(number==1){
int boyIndex = r.nextInt(boyList.size());
String boyname = boyList.get(boyIndex);
System.out.println(boyname);
}else {
int girlIndex = r.nextInt(girlList.size());
String girlname = girlList.get(girlIndex);
System.out.println(girlname);
}
}
}
运行结果:
3.被点到的学生不会再次被点到,但是如果班级里所有的学生都点完了,需要重新开启第二轮点名
package a03Test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
public class Test3 {
public static void main(String[] args) {
//1.定义集合
ArrayList<String> list1=new ArrayList<>();
//2.添加数据
Collections.addAll(list1,"蒋丞","顾飞","盛望","江添","谢俞","贺朝","喻繁","陈景深","简松意","柏淮");
//创建一个临时的集合用来存储已经点到学生的名字
ArrayList<String> list2=new ArrayList<>();
//外循环表示轮数
for (int i = 1; i <= 10; i++) {
System.out.println("==============第"+i+"轮点名开始了=============");
//获取集合的长度
int count=list1.size();
//3.随机点名
Random r=new Random();
//内循环表示随机循环抽取的过程
for (int j = 0; j < count; j++) {
int index = r.nextInt(list1.size());
String name = list1.remove(index);
list2.add(name);
System.out.println(name);
}
//此时表示一轮点名结束
//list1空了,List2存了10个学生的名字
list1.addAll(list2);
list2.clear();
}
}
}
运行结果:
4.要求1:每次被点到的学生,再次被点到的概率在原先的基础上降低一半
Student类:
package a07commonsio;
public class Student {
private String name;
private String gender;
private int age;
private double weight;
public Student() {
}
public Student(String name, String gender, int age, double weight) {
this.name = name;
this.gender = gender;
this.age = age;
this.weight = weight;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
public String toString() {
return name + "-" + gender + "-" + age + "-" + weight;
}
}
测试类:
package a07commonsio;
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
public class Test2 {
public static void main(String[] args) throws IOException {
//1.把文件中所有的学社信息读取到内存中
ArrayList<Student> list = new ArrayList<>();
BufferedReader br = new BufferedReader(new FileReader("Test\\names.txt"));
String line;
while ((line = br.readLine()) != null) {
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 weight = 0;
for (Student stu : list) {
weight = weight + stu.getWeight();
}
//3.计算每一个人的实际占比
double[] arr = new double[list.size()];
int index = 0;
for (Student stu : list) {
arr[index] = stu.getWeight() / weight;
index++;
}
//4.计算每一个人的权重占比范围
for (int i = 1; i < arr.length; i++) {
arr[i]=arr[i]+arr[i-1];
}
//5.随机抽取
//获取一个0.0到1.0之间的随机数
double number = Math.random();
//判断number在arr中的位置
//二分查找
//方法返回-插入点-1
//获取number这个数据在数组中的插入点位置
//插入点=-结果-1
int result= -Arrays.binarySearch(arr, number)-1;
Student stu = list.get(result);
System.out.println(stu);
//6.修改当前学生的权重
double w = stu.getWeight() / 2;
stu.setWeight(w);
//7.把集合中的数据再次写到文件中
BufferedWriter bw=new BufferedWriter(new FileWriter("Test\\names.txt"));
for (Student s : list) {
bw.write(s.toString());
bw.newLine();
}
bw.close();
}
}
运行结果:(运行了两次)