如何从这两个数组中生成一组设定数量的数字?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从这两个数组中生成一组设定数量的数字?相关的知识,希望对你有一定的参考价值。
我在我的项目中定义了String[] private_array;
和String[] public_array;
。
private_array
是一系列数字,没有固定数量(有时更多数字,有时更少),如[105, 21, 57, 60, 103, 108, 111, 113, 116, 173, 104]
同样,public_array
是一系列数字,没有固定数量,如[102, 44, 3]
我想制作一个新的字符串mixture_array
,它将包含总共10个非重复数字,由private_array
和public_array
中的数字组成。这些10个数字应首先来自private_array
,但如果private_array
中的数字少于10个,则来自public_array
的数字应该构成差异。
我怎么能这样做?
现在我有两个方法,getPrivateRandomNumbers();
和getPublicRandomNumbers();
,它们给我每个字符串数组的非重复数字。 (但是,如果一个数组包含少于10个数字,我的活动无法正确加载,我确定它与'11'部分有关)
private Integer[] getPrivateRandomNumbers() {
HashSet<Integer> integers = new HashSet<>(11);
Random random = new Random();
while (integers.size() < 11) {
// add number generation logic below
integers.add(Integer.parseInt(private_array[random.nextInt(private_array.length)]));
}
private_array_numbers = integers.toArray(new Integer[11]);
return private_array_numbers;
}
private Integer[] getPublicRandomNumbers() {
HashSet<Integer> integers = new HashSet<>(11);
Random random = new Random();
while (integers.size() < 11) {
// add number generation logic below
integers.add(Integer.parseInt(public_array[random.nextInt(public_array.length)]));
}
public_array_numbers = integers.toArray(new Integer[11]);
return public_array_numbers;
}
从上面我可以得到:
mixture_array = (Arrays.toString(private_array_numbers) + Arrays.toString(public_array_numbers));
我怎么能把两个阵列融合在一起,以我想要的方式制作mixture_array
?
正如您已经确定评论中的任何2个数组中都没有重复项,我建议您这样做
- 首先将两个数组转换为列表,
- 将它们两者混合以随机顺序获取元素,
- 将
private_array
中的所有shuffeld元素添加到结果列表中, - 迭代你的
public_array
的shuffeld列表,并将每个列表添加到结果列表中(如果它尚不存在) - 最后返回一个结果子列表,计算所需的字符串数量。
例:
public static String[] getMixedRandomNumbers(int size) {
String[] private_array = {"105", "21", "57", "60", "103", "108", "111", "113", "116", "173", "104"};
String[] public_array = {"103", "44", "3"};
List<String> priv = Arrays.asList(private_array);
List<String> publ = Arrays.asList(public_array);
Collections.shuffle(priv);
Collections.shuffle(publ);
List<String> result = new ArrayList<>();
result.addAll(priv);
for(String p : publ){
if(!result.contains(p)){
result.add(p);
}
}
int i = Math.min(size, result.size());
return result.subList(0, i).toArray(new String[i]);
}
这是我的解决方案:
static String[] private_array = new String[]{"105", "21", "21", "21", "21", "21", "60", "103", "108", "111", "111", "116", "173", "104"};
static String[] public_array = new String[]{"103", "44", "104"};
public static void main(String[] args) {
List<String> privateArr = Arrays.asList(private_array);
List<String> publicArr = Arrays.asList(public_array);
List<String> nonDuplicatedPrivate = getNonDuplicated(privateArr, publicArr, new ArrayList<>());
getNonDuplicated(publicArr, privateArr, nonDuplicatedPrivate);
}
private static List<String> getNonDuplicated(List<String> toIterate, List<String> other, List<String> accumulator) {
for (int i = 0; i < toIterate.size() && accumulator.size() < 10; i++) {
String currentElement = toIterate.get(i);
if (!other.contains(currentElement) && toIterate.indexOf(currentElement) == i && toIterate.lastIndexOf(currentElement) == i) {
accumulator.add(currentElement);
}
}
return accumulator;
}
以上是关于如何从这两个数组中生成一组设定数量的数字?的主要内容,如果未能解决你的问题,请参考以下文章
如何在Oracle中生成一周的第一天,一周的最后一天和两个日期之间的周数
编写一个关于Java Bean类url,包括:name(名称)site(官网)和property(性质)等属性。在控制器方法中生成一组Url,并在页面中返回。