mercredi 18 novembre 2020

Why won't my random selection without replacement algorithm work?

I have made a very simple algorithm that picks a set of numToPick random numbers from the range 0 to batchMax, without replacement. Then it places each selected number in an array called numsPicked. For some reason I cannot explain, it isn't working on DartPad.

import 'dart:math';

void main() {
  print(randNoReplace(2, 9));
}

List<int> randNoReplace(int numToPick, int batchMax) {
  List<int> numsPicked = List(numToPick);
  List<int> tmpArray = List(batchMax);
//this for loop creates the tmpArray from 0 to batchMax.
  for (int i = 0; i <= batchMax; i++) {
    tmpArray[i] = i;
  }
//this for loop randomly scrambles said tmpArray.
  for (int i = 0; i <= batchMax; i++) {
    int randIndex = Random().nextInt(batchMax);
    int tmp = tmpArray[i];
    tmpArray[i] = tmpArray[randIndex];
    tmpArray[randIndex] = tmp;
  }
//finally, this for loop adds the first numToPick entries of the scrambled tmpArray and adds them to numsPicked.
  for (int i = 0; i < numToPick; i++) {
    numsPicked[i] = tmpArray[i];
  }
  return numsPicked;
}

So, for example, with 2 and 9 respectively, this algorithm should theoretically give me 2 random non-duplicate numbers in the range [0, 9].




Aucun commentaire:

Enregistrer un commentaire