Java 数组与随机数
生成1000000个从0到37的Math.random()整数,并计算每个数字出现的百分比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);
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有效或无效,他们永远不会响应或接受。