nil不能强制进入Fixnum(TypeError)?

时间:2011-11-28 21:54:46

标签: ruby

尝试根据坐在一个圆圈中的椅子编写拼图。运行时的程序应该遍历数组,首先删除第一个主席,然后删除第二个主席skipping,删除第三个主席并继续,直到one chair为止。

如果输入10,程序就有效,那么答案是4.当我输入20时,我得到21:in '-': nil can't be coerced into Fixnum (TypeError)

这是我丑陋的代码。

print 'Enter number of chairs? ' 
numchairs = gets.chomp.to_i

$arr = []

i=1
while i < numchairs+1 do 
  $arr.push(i)
  i+=1
end

x=0
while $arr.count > 1 do
  current=$arr[x]
  first=$arr[0]
  last=$arr[-1]

  $arr.delete_at(x)

  if (last - current) == 1 
    x=0
  elsif (last - current) == 0 
    x=1
  else
    x+=1
  end
end

print 'The survivor is sitting in chair ' 
puts $arr[0]

1 个答案:

答案 0 :(得分:1)

因为在输入值大于10的情况下,您试图访问放置在数组范围之外的数组元素。例如,您正在获取此类数组的第3个元素:[2, 6, 10]。此操作将nil作为current返回,因此last - current表达式引发TypeError例外。