/ / Ruby: nil non può essere forzato in Fixnum (TypeError) - ruby

Ruby: nil non può essere forzato in Fixnum (TypeError) - ruby

L'errore è sulla linea 12 e non sono sicuro del perchénon è possibile aggiungere numeri. Qualsiasi aiuto è molto apprezzato. Istruzioni: scrivi un metodo che richiede una serie di numeri. Se una coppia di numeri nella matrice somma a zero, restituire le posizioni di quei due numeri. Se nessuna coppia di numeri somma a zero, restituisci nil.

def two_sum(nums)
idx1 = 0
idx2 = 1
while idx1 < nums.length

if nums[idx1] + nums[idx2] == 0

return [idx1, idx2]

end
idx2 += 1
if idx2 == nums.length
idx1 += 1
idx2 = idx1 + 1
end
end
return nil
end

puts("two_sum([1, 3, 5, -3]) == [1, 3]: #{two_sum([1, 3, 5, -3]) == [1, 3]}")
puts("two_sum([1, 3, 5]) == nil: #{two_sum([1, 3, 5]) == nil}")

risposte:

2 per risposta № 1

idx2 potrebbe sovraccaricare la capacità dell'array:

Immaginare. nums = [1,2,3], così nums.length è 3, idx1 = 1, idx2 = 2

idx2 += 1 # ok now idx2 is 3
if idx2 == nums.length # ok true, idx2 == 3
idx1 += 1 # mmm, cool idx1 now 2
idx2 = idx1 + 1 # idx2 is 3
end

Quindi nella prossima iterazione chiamerai

nums[idx2]
# same as
nums[3]
# ERROR! there is only 3 numbers in nums

E prova a capire questo codice

def two_sums(nums)
nums[0..-2].each.with_index do |n,i|
nums[i+1..-1].each.with_index do |m,j|
return [i, i+j+1] if m + n == 0
end
end
nil
end