Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何生成具有一些非常特定约束的数组_Java_Arrays - Fatal编程技术网

Java 如何生成具有一些非常特定约束的数组

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

我想根据一些特定的限制打印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.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)
        ...