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

时间:2013-05-12 14:44:21

标签: java arrays random for-loop printing

我正在尝试创建一个方法,该方法接收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

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;