0

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

4

3 回答 3

0

您可以使用一个集合Set来跟踪已经选择的索引。每次生成随机数时,您首先要检查它是否已存在于 Set 中。如果不是,则打印数组中的值并将索引号添加到集合中。

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

于 2013-05-12T14:48:22.163 回答
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;
}
于 2013-05-12T14:59:01.343 回答
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;
于 2016-06-19T04:03:40.853 回答