From: Robert Klemme Date: 2012-03-09T20:50:03+09:00 Subject: Re: in > comparison of fixnum with nil failed, what's wrong with my code? Samuel Mensah wrote in post #1050813: > I'm trying to write a code which tells me the number of inverted pairs > in an array of numbers so that an array like [4,9,6,3,7] will have 9,6 > as one inversion, 6,3 as another inversion, but 4,9 won't be inverted > cos when counting from 1 to infinity, 4 comes before 9... Do you also want to count 9,3 or only adjacent pairs? From your code it seems you want to look at all pairs a[i], a[j] where j > i. > my code gives > me the error of "6:in '>': Comparison of Fixnum with nil failed > (ArgumentError) and here's the code > > 1 array=[8,4,2,5,6,9,7,1,3,10] > 2 startnum=0 > 3 nextnum=1 > 4 count=0 > 5 while array[startnum] != array[8] That's a weak comparison: better compare startnum with array.size. Also, why do you use a constant here? > 6 if array[startnum] > array[nextnum] > 7 count=count+1 > 8 nextnum=nextnum+1 > 9 if array[nextnum] == array[9] Same here: no constant and compare array indexes not array contents. > 10 startnum=startnum+1 > 11 nextnum=startnum+1 > 12 end > 13 else > 14 nextnum=nextnum+1 > 15 if array[nextnum] == array[9] Again: no constant and compare array indexes not array contents. > 16 startnum=startnum+1 > 17 end > 18 end > 19 end > 20 > 21 puts count > > how do I fix this? You need to make sure that you do not index outside the valid range. With a setup like this always compare indexes with array size and not contents of the array. I have attached a few solutions for both cases. Kind regards robert Attachments: http://www.ruby-forum.com/attachment/7140/cnt.rb -- Posted via http://www.ruby-forum.com/.