Java 随机打印数组元素,直到打印完所有元素

Java 随机打印数组元素,直到打印完所有元素,java,arrays,random,for-loop,printing,Java,Arrays,Random,For Loop,Printing,我试图创建一个方法,该方法接受3个int数组,并从每个数组中打印出一个元素,直到所有三个数组的所有元素至少打印一次。第一个数组有10个元素,第二个数组有7个元素,第三个数组有2个元素。元素是随机选择和打印的。任何帮助都将不胜感激。我们的想法是看看至少打印一次所有元素需要多少次迭代。我不知道该设定什么条件 像这样的大规模迭代。到目前为止,我的代码(仅使用一个数组作为参数): import java.util.*; 公共类{ 私有静态int[]x=新int[]{1,2,3,4,5,6,7,8,9,1

我试图创建一个方法,该方法接受3个int数组,并从每个数组中打印出一个元素,直到所有三个数组的所有元素至少打印一次。第一个数组有10个元素,第二个数组有7个元素,第三个数组有2个元素。元素是随机选择和打印的。任何帮助都将不胜感激。我们的想法是看看至少打印一次所有元素需要多少次迭代。我不知道该设定什么条件 像这样的大规模迭代。到目前为止,我的代码(仅使用一个数组作为参数):

import java.util.*;
公共类{
私有静态int[]x=新int[]{1,2,3,4,5,6,7,8,9,10};
私有静态int[]y=新int[]{1,2,3,4,5,6,7};
私有静态int[]z=新int[]{1,2};
公共静态void main(字符串[]args){
计算(x);
}
公共静态无效计算(int a[]{
随机=新随机();
for(int i=0;i
代码输出:
7 2 4 1 8 10 3 10 7 3

您可以使用像
Set
这样的集合来跟踪已拾取的索引。每次生成一个随机数时,您都会首先检查该随机数是否已存在于集合中。如果不是,则打印数组中的值并将索引号添加到集合中


当该集合的大小等于数组的大小时,循环将结束。

一个数组的解决方案:

public static int calculate(int a[]){
    Random random = new Random();
    HashSet<Integer> remaining = new HashSet<Integer>();
    for (int i = 0; i < a.length; i++) {
        remaining.add(i);
    }
    int i = 0;
    while (!remaining.isEmpty()) {
        int index = random.nextInt(a.length);
        System.out.print(a[index] + " ");
        remaining.remove(index);
        i++;
    }
    System.out.println();
    System.out.println("Finished after " + i + " iterations.");
    return i;
}
公共静态整数计算(整数a[]{
随机=新随机();
HashSet剩余=新的HashSet();
for(int i=0;i
inta[]={4,6,3,2,9,1,5};
Set=新树集();
int计数器=0;
Random rand=新的Random();
while(set.size()!=a.length){
集合。添加(一个[rand.nextInt(a.length)]);
计数器++;
}
System.out.println(“总迭代次数:+计数器”);
返回计数器;

取决于随机发生器的种子。相同的种子=每次相同的数字。(i)在一个集合中加入所有数组(ii)无序排列(iii)打印问题是,我需要拾取每个数组元素,然后将其替换,以便它与再次拾取其他元素的机会相同。老实说,我真的不知道如何使用Set,你能举个例子吗?是的,你很棒,就是这样,谢谢。但是如何用3个数组实现它呢。我想多次调用此方法,以确定打印所有数组的所有元素所需的平均最少迭代次数。无需进一步修改。我刚刚意识到只需要元素最多的数组,因为它将决定所需的总迭代次数。非常感谢你。
public static int calculate(int a[]){
    Random random = new Random();
    HashSet<Integer> remaining = new HashSet<Integer>();
    for (int i = 0; i < a.length; i++) {
        remaining.add(i);
    }
    int i = 0;
    while (!remaining.isEmpty()) {
        int index = random.nextInt(a.length);
        System.out.print(a[index] + " ");
        remaining.remove(index);
        i++;
    }
    System.out.println();
    System.out.println("Finished after " + i + " iterations.");
    return i;
}
int a[] = {4, 6, 3, 2, 9, 1, 5};        
Set<Integer> set = new TreeSet<Integer>();
int counter = 0;
Random rand = new Random();
while(set.size() != a.length){
    set.add(a[rand.nextInt(a.length)]);
    counter ++;
}
System.out.println("Total Iterations : "+counter);
return counter;