Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.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_Android_Arrays_Random - Fatal编程技术网

Java 如何从这两个数组中生成一组数量固定的数字?

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_数组是一个数字序列,没有固定数量,有时多一些,有时少一些,比如[105,21,57,60,103,108,111,113,116,173,104]

同样,public_数组是一个数字序列,没有固定数量,如[102,44,3]

我想创建一个新字符串,mixed_数组,它将包含总共10个非重复数字,由private_数组和public_数组中的数字组成。这10个数字首先应该由私有数组生成,但是如果私有数组中的数字少于10个,那么公共数组中的数字应该弥补差额

我怎么能做到

现在我有两种方法,getPrivateRandomNumbers;和获取数字;从每个字符串数组中得到非重复的数字。但是,如果数组包含少于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;
  }
如何将两个阵列融合在一起,以我所寻找的方式制作混合阵列?

以下是我的解决方案:

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]);
}