Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
-
None
Description
The method does not abide by its contract: elements before the "end" index are included in the shuffle.
/** * Uses a 2-cycle permutation shuffle to randomly re-order the last elements * of list. * * @param list list to be shuffled * @param end element past which shuffling begins */ private void shuffle(int[] list, int end) { int target = 0; for (int i = list.length - 1; i >= end; i--) { if (i == 0) { // XXX "0" should be "end" target = 0; // XXX "0" should be "end" } else { // NumberIsTooLargeException cannot occur target = nextInt(0, i); // XXX "0" should be "end" } int temp = list[target]; list[target] = list[i]; list[i] = temp; } }
I'm going to introduce the above corrections in the new implementation to be located in "MathArrays" (cf. issue MATH-1010).