程序在repl.it中工作,但在Codewars中出现“未定义的方法”错误

时间:2017-02-10 18:52:36

标签: ruby

我一直致力于代码战争挑战,我想提交它,我的代码在repl.it中工作并传递所有测试但是当我在codewars shell中运行它时我得到了这个错误:

queue_time': undefined method `max' for nil:NilClass (NoMethodError)
    from `block in'
    from `block in describe'
    from  `measure'
    from  `describe'
    from  `'

这是代码:

def queue_time(customers, n)
  total_queue = [] 
  i = 0 

  while i < n
    total_queue << [customers[i]]
    i += 1 
  end 

  open_queue_index = total_queue.index {|x| x == total_queue.min}
  k = n  

  while k < customers.length
    array_summed = []
    total_queue[open_queue_index] << customers[k]

      total_queue.each_index do |index|
        array_summed << total_queue[index].reduce(:+)
      end 

    open_queue_index = array_summed.index {|x| x == array_summed.min}
    k += 1 
  end 
  array_summed.max
end

为什么Codewars不会理解.max方法?

2 个答案:

答案 0 :(得分:0)

array_summed未初始化。

while false
  array_summed = [] # initialized
end

array_summed # is nil because it was never initialized.

```

答案 1 :(得分:0)

如果customers数组为空,您的方法将会中断。如果该数组为空,则该方法永远不会进入while k < customers.length块,并且永远不会初始化array_summed

然后在最后一行,array_summed.max基本上就像说nil.max

您是否在repl.it和codewars中传递了不同的customers数组?如果您在代码表中测试的数组为空,那么这将会中断。