samedi 28 avril 2018

Why random number generator not giving random repeated output

So I have written this function for random number generator and then shuffle them , I was wondering it will give us a random number so I was expecting a count of few numbers more than one so I wrote a hashmap so keep track of the count, but after running this code the output is 1 corresponding to each key that means no repetition, but then does it solve the purpose of being random when its not repeating its own value. Please a little explanation would be appreciated here " I know this function is creating the random, why we are subtracting the "i" here --> int r = i + rand.nextInt(100-i)

package interview.java.crack;

import java.util.HashMap;
import java.util.Map;
import java.util.Random;

public class ShuffleDeckCards {

// Function which shuffle and print the array
public static void shuffle(int card[], int n) {



    Random rand = new Random();

    for (int i = 0; i < n ; i++) {
        // Random for remaining positions.
        int r = i + rand.nextInt(100-i);

        // swapping the elements
        int temp = card[r];
        card[r] = card[i];
        card[i] = temp;

    }
}

// Driver code
public static void main(String[] args) {
    // Array from 0 to 51
    int a[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99};
    shuffle(a, 100);

    Map<Integer,Integer> mp = new HashMap<Integer,Integer>();




    int count = 0;
    // Printing all shuffled elements of cards
    for (int i = 0; i < 100; i++){
    //  System.out.print(a[i] + " ");

    if(mp.containsKey(a[i])){
        count = mp.get(a[i]) +1;
        mp.put(a[i], count);
    }

    else{
        mp.put(a[i], 1);
    }
    }

    for(Map.Entry<Integer, Integer> hm : mp.entrySet()){
        int value = hm.getValue();
        int key = hm.getKey();
        System.out.println(" key is " + key + " value "+ value);
    }

}

}




Aucun commentaire:

Enregistrer un commentaire