【问题标题】:Printing array elements at random until all elements have been printed随机打印数组元素,直到打印完所有元素
【发布时间】:2013-05-06 16:32:27
【问题描述】:

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

【问题讨论】:

  • 取决于随机化器的种子。相同的种子 = 每次相同的数字。
  • (i) 将所有数组加入一个集合 (ii) shuffle (iii) 打印

标签: java arrays random for-loop printing


【解决方案1】:

一个数组的解决方案:

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

【讨论】:

  • 是的,你太棒了,就是这样,谢谢大家。但是你将如何用 3 个数组来实现它。我想多次调用此方法以确定打印所有数组的所有元素所需的平均最少迭代次数。
  • 我刚刚再次查看了您的代码。无需进一步改动。我刚刚意识到只需要具有最多元素的数组,因为它将确定所需的迭代总数。非常感谢。
【解决方案2】:

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

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

【讨论】:

  • 问题是我需要选择每个数组元素然后替换它,以便它与其他元素有相同的机会再次被选择。老实说,我真的不知道如何使用Set,你能举个例子吗?
【解决方案3】:
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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-30
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多