题目二:

分析:
提到概率,其中包含了随机,随机通常与Random类有关,但本例中Random类不能直接用,因为Random类生成的随机数是随机点,比如在1到20中随机抽取一个数,此时随机抽取到13,这里的13表示的是数字13即随机点,而概率是随机面,在本题中要的是随机面:

要想解决本例中随机面即概率的问题,可以在集合中添加7个1和3个0(总共就是10个数),此时7个1在集合中占70%,3个0在集合中占30%,然后可以把集合中的1和0都打乱顺序,再从这个集合中抽1或0,此时抽中1的概率为70%,抽中0的概率为30%
->如果抽中了1,就在存储男生的集合里随机抽取一个男生姓名;如果抽中了0,就在存储女生的集合里随机抽取一个女生姓名
->此时抽中男生的概率为70%,抽中女生的概率为30%。
注:题目的要求是70%的概率随机到男生,30%的概率随机到女生,这里概率针对的是男生和女生,和男生、女生的姓名无关,因此在满足题目要求下对男生、女生的姓名进行随机抽取是不影响本题的
解答:
对于第四步从list集合中随机抽取0或者1,由于每一个索引上抽中1的概率都为70%,抽中0的概率都为30%,所以随机抽取一个索引是可以的:
package com.itheima.a06test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
public class Test2 {
public static void main(String[] args) {
Random r = new Random();
//1.创建集合,存储0和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
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<>();
//6.添加学生
Collections.addAll(boyList,"范闲", "范建", "范统", "杜子腾", "宋合泛", "侯笼藤", "朱益群", "朱穆朗玛峰"); //男生
Collections.addAll(girlList,"杜琦燕", "袁明媛","李猜","田蜜蜜"); //女生
//7.判断此时是从boyList集合中抽取还是从girlList集合中抽取
if(number==1){
//从boyList集合中抽取
int boyIndex = r.nextInt(boyList.size());
String name = boyList.get(boyIndex);
System.out.println(name);
} else if (number == 0) {
//从girlList集合中抽取
int girlIndex = r.nextInt(girlList.size());
String name = girlList.get(girlIndex);
System.out.println(name);
}
}
}
注:上述代码中因为boyList.get(boyIndex)和girlList.get(girlIndex)不一样,所以 boyList.get(boyIndex)和girlList.get(girlIndex)可以赋值给同一个变量名即本代码里的name。
对于第四步从list集合中随机抽取0或者1,也可以不使用随机索引的方法,因为存储0和1的list集合已经被打乱,满足了抽中1的概率为70%,抽中0的概率为30%,因此这里固定获取list集合某一索引如0索的元素是可以的,理由是每一个索引上抽中1的概率都为70%,抽中0的概率都为30%:
package typeOfTest;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
public class Test4 {
public static void main(String[] args) {
Random r = new Random();
//1.创建集合,存储0和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索引上的元素
/*由于存储0和1的list集合已经被打乱,满足了抽中1的概率为70%,抽中0的概率为30%,
因此这里固定获取list集合某一索引如0索引的元素也是可以的,
因为每一个索引上抽中1的概率都为70%,抽中0的概率都为30%*/
int number = list.get(0);
System.out.println(number);
//5.创建两个集合分别存储男生和女生的名字
ArrayList<String> boyList=new ArrayList<>();
ArrayList<String> girlList=new ArrayList<>();
//6.添加学生
Collections.addAll(boyList,"范闲", "范建", "范统", "杜子腾", "宋合泛", "侯笼藤", "朱益群", "朱穆朗玛峰"); //男生
Collections.addAll(girlList,"杜琦燕", "袁明媛","李猜","田蜜蜜"); //女生
//7.判断此时是从boyList集合中抽取还是从girlList集合中抽取
if(number==1){
//从boyList集合中抽取
int boyIndex = r.nextInt(boyList.size());
String name = boyList.get(boyIndex);
System.out.println(name);
} else if (number == 0) {
//从girlList集合中抽取
int girlIndex = r.nextInt(girlList.size());
String name = girlList.get(girlIndex);
System.out.println(name);
}
}
}
3529

被折叠的 条评论
为什么被折叠?



