Java 如何从这两个数组中生成一组数量固定的数字?
我有字符串[]私有数组;和字符串[]公共_数组;在我的项目中定义 private_数组是一个数字序列,没有固定数量,有时多一些,有时少一些,比如[105,21,57,60,103,108,111,113,116,173,104] 同样,public_数组是一个数字序列,没有固定数量,如[102,44,3] 我想创建一个新字符串,mixed_数组,它将包含总共10个非重复数字,由private_数组和public_数组中的数字组成。这10个数字首先应该由私有数组生成,但是如果私有数组中的数字少于10个,那么公共数组中的数字应该弥补差额 我怎么能做到 现在我有两种方法,getPrivateRandomNumbers;和获取数字;从每个字符串数组中得到非重复的数字。但是,如果数组包含少于10个数字,我的活动无法正确加载,我确信这与“11”部分有关Java 如何从这两个数组中生成一组数量固定的数字?,java,android,arrays,random,Java,Android,Arrays,Random,我有字符串[]私有数组;和字符串[]公共_数组;在我的项目中定义 private_数组是一个数字序列,没有固定数量,有时多一些,有时少一些,比如[105,21,57,60,103,108,111,113,116,173,104] 同样,public_数组是一个数字序列,没有固定数量,如[102,44,3] 我想创建一个新字符串,mixed_数组,它将包含总共10个非重复数字,由private_数组和public_数组中的数字组成。这10个数字首先应该由私有数组生成,但是如果私有数组中的数字少于1
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;
}
如何将两个阵列融合在一起,以我所寻找的方式制作混合阵列?以下是我的解决方案:
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;
}
由于您已经保证评论中的两个数组中不会有重复的,我建议 首先将两个数组转换为列表, 对它们进行疏解,以获得随机顺序的元素, 将私有数组中的所有shuffeld元素添加到结果列表中, 迭代公共_数组的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]);
}
你想从你定义的两个数组中抽取10个随机的不重复的数字吗?是的,但如果两个数组不构成数字,则可能小于10。是否要合并返回的两个数组?一个数组中是否有重复的数组?两个数组中都没有重复的数组。据我所知,每次都会列出相同的数组值?正在尝试运行此代码,但现在。流正在导致问题,只能在Java 8上访问。@CHarris我已编辑了答案并删除了流部分。
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]);
}