2016-11-27 72 views
-1

产生从0百万的Math.random()整数至37,并计算每个号码出现数组和随机数

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中创建一个变量来创建百分比,但是,由于我无法创建一个双我如何处理这个?

+1

你误解了这个问题。它要求在0到37范围内的1000000个数字;而不是在1到1000000范围内的37个数字。 –

+0

你是什么意思“我不能创建一个双?”? –

+0

对不起,否则你怎么写的百分比? @DavidWallace – user7214716

回答

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解决方案更具可重用性,但阵列解决方案将适用于此代码,并且更简单。

+0

'HashMap'似乎有点矫枉过正;一个由37个元素组成的阵列可以做到这一点。 –

+0

@ScottHunter是真的,但哈希映射有很好的get/put方法和迭代器和东西。诚实无关。我将在那里编辑数组。 –

+0

小心那个整数除有 – harold

0

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

+0

已经写了这个。 –

+0

是的,看起来你打了我5分钟,给了一个更详细的答案。用Ashwin的答案代替我的答案。 – Hmmmmm

+0

谢谢嗯。 Idk如果这对于OP是有效的,他们从未回应或接受。 –

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