我正在尝试创建一个方法,该方法接收3个int数组并从每个数组中打印出一个元素,直到所有三个数组的所有元素都至少打印一次。第一个数组有10个元素,第二个数组有7个,第三个数组有2.元素是随机选择和打印的。任何帮助,将不胜感激。我们的想法是看看至少打印一次所有元素需要多少次迭代。我不知道要设定的条件 像这样的大规模迭代。到目前为止我的代码(只有一个数组作为参数):
import java.util.*;
public class calculateAverage{
private static int[] x = new int[]{1,2,3,4,5,6,7,8,9,10};
private static int[] y = new int[]{1,2,3,4,5,6,7};
private static int[] z = new int[]{1,2};
public static void main(String[] args){
calculate(x);
}
public static void calculate(int a[]){
Random random = new Random();
for(int i = 0;i < a.length; i++){
System.out.print(a[random.nextInt(a.length)] + " ");
}
System.out.println();
}
}
代码输出: 7 2 4 1 8 10 3 10 7 3
答案 0 :(得分:0)
您可以使用Set
之类的集合来跟踪已经选择的索引。每次生成随机数时,首先要检查它是否已存在于Set中。如果没有,请在数组中打印值并将索引号添加到集合中。
当该组的大小等于数组的大小时,您的循环将结束。
答案 1 :(得分:0)
一个阵列的解决方案:
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;
}
答案 2 :(得分:0)
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;