Java 如何生成具有一些非常特定约束的数组
我想根据一些特定的限制打印100个int数组Java 如何生成具有一些非常特定约束的数组,java,arrays,Java,Arrays,我想根据一些特定的限制打印100个int数组 每个数组的长度可以从2到10不等 每个数组中的每个项都必须是唯一的 每个数组中的项目从最低到最高排序 没有相同的数组,这意味着两个数组具有相同的长度和相同的项 目前我有这个密码 import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; import java.ut
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ThreadLocalRandom;
public class prova {
public static void main(String[] args) {
Integer[] elements = new Integer[]{1,2,3,4,5,6,7,8,9,10};
Set<List<Integer>> seenAlready = new HashSet<>();
for (int i = 0; i < 100; i++) {
final Integer[] array = generateRandomArrayFromElements(elements);
Arrays.sort(array);
if (seenAlready.add(Arrays.asList(array)))
System.out.println(Arrays.toString(array));
}
}
private static Integer[] generateRandomArrayFromElements(Integer[] elements) {
int size = ThreadLocalRandom.current().nextInt(1, elements.length) + 1;
Integer[] array = new Integer[size];
ArrayList<Integer> usedIndices = new ArrayList<>(size);
for (int i = 0; i < array.length; i++) {
int randomIndex = getUniqueRandomIndex(usedIndices, size);
usedIndices.add(randomIndex);
array[i] = elements[randomIndex];
}
return array;
}
private static int getUniqueRandomIndex(ArrayList<Integer> usedIndices, int max) {
int randomIndex = ThreadLocalRandom.current().nextInt(0, max);
final boolean contains = usedIndices.contains(randomIndex);
if (contains)
randomIndex = getUniqueRandomIndex(usedIndices, max);
return randomIndex;
}
}
我从来没有得到过这样的数组:
[3,4,8,9]
[2,3,6,7,8]
每次他们都以[1,2,3,4]
等开头
我不明白 1-开始生成100个空数组,长度从2到10不等 2-计算总大小 3-生成x个唯一整数并将其添加到集合中
Set<Integer> set = new HashSet<Integer>();
while(set.size()< xxx) {
set.add(generateRandomInteger());
}
Collections.sort(set);
Set Set=newhashset();
while(set.size()
(其中xxx是总数组大小
4-将整数添加到数组中。1-开始生成100个空数组,长度从2到10不等 2-计算总大小 3-生成x个唯一整数并将其添加到集合中
Set<Integer> set = new HashSet<Integer>();
while(set.size()< xxx) {
set.add(generateRandomInteger());
}
Collections.sort(set);
Set Set=newhashset();
while(set.size()
(其中xxx是总数组大小
4-将整数添加到数组中。问题是您正在生成范围从0到array.length的索引
- 因此,如果数组大小为2,那么您的范围是问题是您正在从0到array.length范围内生成索引
- 因此,如果数组大小为2,那么您的范围似乎是一个bug:您使用的JDK版本是什么?在Windows命令propmpt中使用java-version命令检查我得到1.8.0 o似乎可能是一个bug:您使用的JDK版本是什么?在Windows命令propmpt中使用java-version命令检查我得到1.8.0 or带有项目表示的示例使解释立即清晰。我知道问题在哪里。非常感谢。您带有项目表示的示例使解释立即清晰。我知道问题在哪里。非常感谢。
Spots to fill |Elements to choose from based on range ======================================= [_,_] |[1,2,................] range <0,2) [_,_,_] |[1,2,3,..............] range <0,3) [_,_,_,_] |[1,2,3,4,............] range <0,4) ...
- 因此,如果数组大小为2,那么您的范围似乎是一个bug:您使用的JDK版本是什么?在Windows命令propmpt中使用java-version命令检查我得到1.8.0 o似乎可能是一个bug:您使用的JDK版本是什么?在Windows命令propmpt中使用java-version命令检查我得到1.8.0 or带有项目表示的示例使解释立即清晰。我知道问题在哪里。非常感谢。您带有项目表示的示例使解释立即清晰。我知道问题在哪里。非常感谢。