Ruby未定义方法` - '为零:NilClass(NoMethodError)
问题描述:
我正在开发一个项目,遇到一个我不熟悉的错误。当我运行我的代码时,我收到'未定义的方法' - 'nil:NilClass(NoMethodError)',经过一番研究,意味着target_floors [j]为零。为什么会发生这种情况以及如何解决?形式first..last
的Ruby未定义方法` - '为零:NilClass(NoMethodError)
def retrieve_floor(n, target_floors)
smallestDifference = n
toReturn = 0
for i in 1..n
tempDiff = 0
for j in 0..target_floors.length
difference = target_floors[j] - i
if difference > 0
tempDiff += difference
else
tempDiff += difference.abs
end
end
if tempDiff < smallestDifference
smallestDifference = tempDiff
toReturn = i
end
end
return toReturn
end
答
范围均包括端点,让你迭代一个超出数组的末尾。
您可以改为使用0...target_floors.length
(其中包括0,但不包括结尾),但更好和更红宝石的方法是使用each
来遍历数组,而不是使用索引。
由于'target_floors'正在传递给此方法,因此通过它的任何人都会在数组中提供'nil'值。你想如何解决它?预计数组中的某些元素是否为“无”?如果不是,则主叫方有错。如果是,那么你只需要检查'nil'('如果target_floors [j] .nil?...')。 – lurker
'j'比数组的最后一个索引更有可能。 –