Ruby:nil无法强制进入Fixnum(TypeError)

时间:2014-10-24 22:24:43

标签: ruby

错误在第12行,我不知道为什么我无法添加数字。任何帮助深表感谢。 说明:编写一个采用数组的方法。如果数组中的一对数字总和为零,则返回这两个数字的位置。如果没有数字对总和为零,则返回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}")

1 个答案:

答案 0 :(得分:2)

idx2可能会溢出您阵列的容量:

想象。 nums = [1,2,3]nums.length为3,idx1 = 1idx2 = 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

因此,在下一次迭代中,您将调用

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

并尝试理解此代码

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