2016-03-02 232 views
0

我正在開發一個項目,遇到一個我不熟悉的錯誤。當我運行我的代碼時,我收到'未定義的方法' - '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

範圍均包括端點,讓你迭代一個超出數組的末尾。

您可以改爲使用0...target_floors.length(其中包括0,但不包括結尾),但更好和更紅寶石的方法是使用each來遍歷數組,而不是使用索引。

相關問題