```Hi,

On Wed, Aug 29, 2007 at 10:39:21PM +0900, Mark Ransom wrote:
> Hi,
>
> I'm a novice programmer who is just starting out in Ruby. I've been
> playing around with arrays and have run into a problem:
>
> This works:
>
> array = [3,2,1]
> puts array.sort
>
> =>123
>
> BUT this doesn't (error attached):
>
> nums = Array.new
>
> numplays = 5
>
> numplays.times do
>
>   for values in 1..5
>     ball = rand(56)
>     redo if ball == 0 || nums.include?(ball)
>     nums [values] = ball
puts nums.join(',')
>   end
> puts nums.sort
> end
>
> Can anyone shed light on this newby?

So what you are attempting to do is generate 25 random numbers between 1
and 55, with no duplicates?

> http://www.ruby-forum.com/attachment/183/array_sort.JPG

The problem you are having is that when you get a number, you insert it
into the array at slots 1,2,3,4 and 5.  But your array is actually a 0
based index.  The first slot is nums[0].  That means when you do your
sort you are sorting for instance [nil,2,32,1,44,26] which is an array
of size 6, and nil doesn't compare with an integer via the <=> operator.

The simpliest way to solve your issue is to change:

for values in 1..5

to

5.times do |values|

If you want to change it up even more and not have to 'redo' then you
might change nums to a Hash and use its keys to hold the 'ball' values

nums = {}
while nums.size < 5 do
ball = rand(55) + 1   # gives a value 1..55
nums[ball] = ball     # put ball into the hash
end
puts num.keys.sort.join(',')

It appears the basic problem you are doing is to choose 5 distinct
numbers from 1..55 N times.  You may want to look at this ruby quiz for
interesting items:

http://www.rubyquiz.com/quiz39.html

enjoy,

-jeremy

--
========================================================================
Jeremy Hinegardner                              jeremy / hinegardner.org

```