从0到37生成1,000,000个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]);
}
}
}
嗨所以我做了大部分代码一切正常。我可以获得37个随机1到1000000的数字但是,我无法得到它们的百分比。我尝试在Random Int中创建一个可以创建百分比的变量但是,因为我不能创建一个double,我该如何处理它?</ p>
答案 0 :(得分:1)
这就是我要做的。生成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);
}
现在只需循环显示地图的键,然后除以键的总数。
或者:
只需使用包含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)
}
HashMap解决方案更具可重用性,但阵列解决方案适用于此代码并且更简单。
答案 1 :(得分:0)
除了数组之外,你可以通过将它们保存在Map中来跟踪每个整数的数量,其中key是生成的随机整数,值是它出现的次数。如果您不想使用映射,则可以使用另一个数组,并使用数组的索引部分作为键,将值作为生成整数的次数的计数。
答案 2 :(得分:0)
与@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();
}