Java 数组与随机数

Java 数组与随机数,java,arrays,random,numbers,Java,Arrays,Random,Numbers,生成1000000个从0到37的Math.random()整数,并计算每个数字出现的百分比 package arrays; import java.util.List; import java.util.Random; public class arraysintro { public static void main(String[] args){ int numValues = 1000000; int[] array = randomArray(numValues);

生成1000000个从0到37的Math.random()整数,并计算每个数字出现的百分比

package arrays;
import java.util.List;
import java.util.Random;

public class arraysintro {

public static void main(String[] args){

    int numValues = 1000000;
    int[] array = randomArray(numValues);
    printArray(array);
}

public static int[] randomArray(int n) {
    int[] a = new int[n];
    for (int i = 0; i<a.length; i++) {
        a[i] = randomInt(0, 37);
    }
    return a;
}

private static int randomInt(int i, int j) {
    Random random = new Random();
    int abc = random.nextInt(37);
    return  abc;
}

public static void printArray(int[] a) {
    for (int i = 0; i<a.length; i++) {
        System.out.println(a[i]);
    }
}
封装阵列;
导入java.util.List;
导入java.util.Random;
公共类arraysintro{
公共静态void main(字符串[]args){
int numValues=1000000;
int[]数组=随机数组(numvalue);
打印阵列(数组);
}
公共静态int[]随机数组(int n){
int[]a=新的int[n];

对于(int i=0;i这就是我要做的。生成1000000个数字并将它们存储在数组中后,使用
HashMap
计算每个数字的数量

HashMap<Integer, Integer> map = new HashMap<Integer, Integer>(); 
int[] a; //initalzie this;

for(int i = 0; i< a.length; i++) { 
   if(map.containsKey(i)) map.put(i, map.get(i) + 1); 
   else map.put(i, 1);
} 
HashMap map=newhashmap();
int[]a;//initalzie this;
对于(inti=0;i
现在只需循环浏览地图的关键点并除以关键点的总数

或者:

只需使用37个元素的数组

int amounts  = new int[38]; 
double percents = new double[38];
for(int i  = 0 ; i< a.length; i++) { 
   amounts[a[i]]+=1; 
}
for(int i = 0; i < 38; i++) {
   percents[i] = ((double)amounts[i]/(double)a.length) * 100.0; //percent is the number of occurances 
   // divided by total amount of numbers (and * 100 to convert from decimal to percent)
}
int金额=新int[38];
双倍百分比=新的双倍[38];
对于(inti=0;i

HashMap解决方案更具可重用性,但数组解决方案适用于此代码且更简单。

除了数组之外,您还可以通过将每个整数保存在一个映射中来跟踪它们的数量,其中键是生成的随机整数,值是它出现的次数。如果您不想使用映射您可以使用另一个数组,并使用数组的索引部分作为键,使用值作为生成该整数的次数的计数。

类似于@Ashwin所说的,但我将使用
AtomicInteger
作为映射的值

例如:

import java.util.concurrent.atomic.AtomicInteger;

int[] numbers;
Map<Integer, AtomicInteger> counts;

for (int i = 0; i < 1_000_000; i++) {
    int r = random();
    numbers[i] = r;

    if (!counts.containsKey(r))
        counts.put(r, new AtomicInteger());
    counts.get(r).incrementAndGet();
}
导入java.util.concurrent.AtomicInteger;
int[]数字;
地图计数;
对于(int i=0;i<1_000;i++){
int r=random();
数字[i]=r;
如果(!counts.containsKey(r))
counts.put(r,新的AtomicInteger());
counts.get(r).incrementAndGet();
}

您误解了这个问题。它要求的是0到37之间的1000000个数字,而不是1到1000000之间的37个数字。您所说的“我不能创建双精度”是什么意思?很抱歉,否则您如何编写百分比?@davidwallace有一个错误@ScottHunter不要每次都创建一个新的
Random
。这使得它不是随机的。
HashMap
似乎有点过火;一个包含37个元素的数组就可以了。@ScottHunter true,但是HashMap有很好的get/put方法和迭代器d的东西。老实说没关系。我会在那里编辑数组的东西。小心整数除法是的,看起来你比我快了5分钟,给出了更详细的答案。用Ashwin的答案代替我的。谢谢。Idk如果这对OP有效或无效,他们永远不会响应或接受。