2014-10-15 4 views
0

У меня возникли проблемы с некоторым кодом, который я должен был написать для своего курса.Отображение генератора случайных чисел Java

Мне пришлось написать генератор случайных чисел, который запускается через цифры от одного до пятидесяти, десяти тысяч раз, а затем распечатывает только 15 самых высоких номеров. Мне удалось сделать все правильно, кроме как распечатать верхние 15 наивысших.

Вот мой полный блок кода

package section4; 
import java.util.Random; 
public class Lottery { 
    public static void main(String[] args) { 
     Random rand = new Random(); 
     int freq[] = new int[51]; 
     for(int roll = 1; roll<1000000;roll++){ 
      ++freq[1+rand.nextInt(50)]; 
     } 
     System.out.println("Lottery Number\tFrequency"); 
     for(int face = 0; face<freq.length ;face++){ 
      System.out.println(face+"\t"+freq[face]); 
     } 
    } 
} 

Я попытался с помощью ArrayList.

Сначала я создал ArrayList, а затем добавил лицо и freq [лицо] в arraylist, а затем напечатал элементы ArrayList. Я устал от этого с небольшим шансом, и, как я думал, я ошибся.

package section4; 
import java.util.ArrayList; 
import java.util.Random; 

public class Lottery { 
public static void main(String[] args) { 

    Random rand = new Random(); 
    int freq[] = new int[51]; 


    ArrayList<Integer> top = new ArrayList<Integer>(15); 

    for(int roll = 1; roll<1000000;roll++){ 
     ++freq[1+rand.nextInt(50)]; 
    } 

    System.out.println("Lottery Number\tFrequency"); 

    for(int face = 0; face<freq.length ;face++){ 

     top.add(face); 
     top.add(freq[face]); 

     System.out.println(top);    
    } 

} 
} 

И я также попытался изменить «Для заявления», но я также знал, что изменить его на то, что я всего лишь говорит компилятору бежать от 0 - 15, а не полный 50.

for(int face = 0; face< 15 ;face++){} 

Может ли кто-нибудь помочь, как я могу распечатать только 15 наивысших баллов, поскольку я застрял на этом в течение нескольких дней.

+1

используйте «Map » и свяжите каждое число с тем, сколько раз оно происходит. – SJuan76

ответ

1
int[] b =Arrays.copyOf(freq, 5);  
Arrays.sort(b); 
    for(int i = 0 ; i < 15 ; i++){ 
     System.out.println(b[50 - i]); 
    } 
+0

Это потеряет исходный индекс каждого элемента. Другими словами, после сортировки у вас не будет возможности узнать, какая частота имела это значение. – Mureinik

0

Вы можете использовать SortedMap для хранения частоты в качестве Ключа и числа в качестве значения. Затем просто перебирайте карту в нужном порядке.

Смежные вопросы