I am trying to create a randomly generated array of x numbers with no duplicates. I am choosing numbers, one at a time, then comparing each new number to the numbers already in the array.
Here is my code. At the end I should have an array of seven numbers, none that match, but sometimes I get a nil:
array = [] #DEFINES THE ARRAY
array[0] = rand(10) #THIS CHOOSES FIRST NUMBER (FN) AND PUTS IT IN THE FIRST ARRAY SPOT
p "fn = #{array[0]}"
for i in 1..6 #START OF FOR LOOP TO GET 6 NUMBERS IN THE ARRAY - WHY 6? THE FIRST NUMBER THAT POPPED IN MY HEAD
p "Iteration #{i} -------------------------" # THIS IS JUST SO I KNOW WHERE I AM IN THE LOOPS
@x = rand(10) #THIS CHOOSES THE NEXT NUMBER AND ALL NUMBERS AFTER
array.each do |uc| # THIS IS THE LOOP THAT COMPARES ALL NUMBERS
@type = @x == uc ? "yes" : "no" #DOES THE CHOSEN NUMBER EQUAL ANY NUMBER IN THE ARRAY
p "does #{uc} = #{@x}? #{@type}"
if @type == "yes" # IF THE COMPARE IS TRUE, I DON'T WANT ANYTHING DONE. IT WILL CYCLE THRU AND GET A NEW NUMBER
i = 1
p "YES #{@x} = #{uc}"
break
end #END OF IF YES
end #END OF ARRAY EACH
if @type == "no" #IF NO, PUT NEXT NUMBER (@X) INTO THE NEXT ARRAY SPOT.
p "in last if type= #{@type}" #THESE STATEMENTS JUST PRINT OUT THE DIFFERENT VARIABLES SO I KNOW I AM GETTING WHAT I EXPECT
p "in last if x = #{@x}"
p "in last if i = #{i}"
@x = array[i] #THIS "SHOULD" FILL THE NEXT ARRAY SPOT - BUT DOESN'T SEEM TO
p "#{array[i]} is in the array" #THIS PRINT OUT IS BLANK - STATEMENT ABOVE DID NOT WORK.
p array[i]
end #END OF IF NO
end #END OF FOR LOOP
p array #PRINTS OUT THE CONTENTS OF THE ARRAY
I know there are probably quicker and easier ways to do this, but I am starting out with what I know, and building up.