In > comparison of fixnum with nil failed, what's wrong with my code?

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… 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]
6 if array[startnum] > array[nextnum]
7 count=count+1
8 nextnum=nextnum+1
9 if array[nextnum] == array[9]
10 startnum=startnum+1
11 nextnum=startnum+1
12 end
13 else
14 nextnum=nextnum+1
15 if array[nextnum] == array[9]
16 startnum=startnum+1
17 end
18 end
19 end
20
21 puts count

how do I fix this?

Thank you :slight_smile:

Samuel M. 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

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs