Ruby未定义方法` - '为零:NilClass(NoMethodError)

问题描述:

我正在开发一个项目,遇到一个我不熟悉的错误。当我运行我的代码时,我收到'未定义的方法' - 'nil:NilClass(NoMethodError)',经过一番研究,意味着target_floors [j]为零。为什么会发生这种情况以及如何解决?形式first..lastRuby未定义方法` - '为零: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'正在传递给此方法,因此通过它的任何人都会在数组中提供'nil'值。你想如何解决它?预计数组中的某些元素是否为“无”?如果不是,则主叫方有错。如果是,那么你只需要检查'nil'('如果target_floors [j] .nil?...')。 – lurker

+0

'j'比数组的最后一个索引更有可能。 –

范围均包括端点,让你迭代一个超出数组的末尾。

您可以改为使用0...target_floors.length(其中包括0,但不包括结尾),但更好和更红宝石的方法是使用each来遍历数组,而不是使用索引。