String s1 = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15";// 代表全部参与抽奖的人员编号
String s2 = "2,5,6";// 代表已经中奖的人员编号
int number = 3;
// 写一个函数,从s1中随机筛选出number个数字,且此数字不在s2中。返回一个字符串。
// 请理解好需求,假设s1是全公司人员编号,s2是一等奖中奖人员,现在是要抽取n个二等奖。
import java.util.ArrayList;
import java.util.Random;
public class TestRandom {
public static void main(String[] args) {
String s1 = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15";// 代表全部参与抽奖的人员编号
String s2 = "2,5,6";// 代表已经中奖的人员编号
int number = 3;
// 写一个函数,从s1中随机筛选出number个数字,且此数字不在s2中。返回一个字符串。
// 请理解好需求,假设s1是全公司人员编号,s2是一等奖中奖人员,现在是要抽取n个二等奖。
String[] arr = getSecondRand(s1, s2, number);
for (String string : arr) {
System.out.println(string);
}
}
public static String[] getSecondRand(String s1, String s2, int number) {
String[] array1 = s1.split(",");
String[] array2 = s2.split(",");
// 将一等奖标记为a
for (int i = 0; i < array2.length; i++) {
for (int j = 0; j < array1.length; j++) {
if (array2[i].equals(array1[j])) {
array1[j] = "a";
}
}
}
// 建立新数组,不包含一等奖数字,即不包含a
String[] temp = new String[array1.length - array2.length];
for (int i = 0, j = 0; i < array1.length; i++) {
if ("a".equals(array1[i])) {
continue;
}
temp[j++] = array1[i];
}
// 在temp中挑选n个随机数,先挑选number个不同的随机数,作为temp数组的下标
ArrayList<Integer> list = new ArrayList<>();
Random random = new Random();
for (int i = 0; i < number; i++) {
int num = random.nextInt(temp.length);
if (list.contains(num)) {
i--;
continue;
}
list.add(num);
}
// 根据随机下标取得最终二等奖号码
String[] result = new String[number];
for (int i = 0; i < list.size(); i++) {
result[i] = temp[list.get(i)];
}
return result;
}
}