将数组值大小增加1错误时出错

时间:2017-01-28 15:17:55

标签: arrays ruby count increment

我正在尝试创建一个程序,它将输入两个大小为10或更小的整数,它计算输入整数求和后的进位操作量。

例如:

示例输入:

59864417 974709147

示例输出:

6

在我的程序中返回错误的行是:

parta[i+1] = ( parta[i+1] + 1 )

我正在尝试将1添加到当前位于下一个数组位置的值。

run = true

while run == true
  #input string
    text = gets.chomp
 #split string and remove space
    parta = text.split[0]
    partb = text.split[1]
#convert split strings to integers
    partf1 = parta.to_i
    partf2 = partb.to_i
#check for terminal input of 0 
      if partf1 + partf2 <= 0
          run = false
      end
#fill strings with 0s to size 11
     parta = sprintf( "%011i", parta )
     partb = sprintf( "%011i", partb )


#convert strings to arrays of integers
parta = parta.split("").map(&:to_i)
partb = partb.split("").map(&:to_i)

count = 0

(10).downto(0) do |i|

if ( parta[i] + partb[i] ) > 9
   count = count + 1
   parta[i+1] = ( parta[i+1] + 1 )
#59864417 974709147 test input should output 6
 end

end
if run == true

puts "#{count} carry operations."

end
end

当我运行时,我收到以下错误消息:

test5.ruby:42:在block in <main>': undefined method +'中为nil:NilClass(NoMethodError)     来自test5.ruby:29:downto' from test5.ruby:29:in

有人能帮帮我吗? :)

3 个答案:

答案 0 :(得分:0)

问题在于这一行

parta[i+1] = ( parta[i+1] + 1 )

如果i == size of the array i + 1,表达式nil将返回导致错误的Moya

答案 1 :(得分:0)

将我的评论扩展为稍长的答案:

我怀疑整体方法更简单,但对于您的特定问题:数组中的最高索引是10。在这种情况下,当i为10时,parta[i+1](右侧)为nil,因为数组中没有包含该索引的元素。当您尝试增加nil时,会出现错误。但是如果你想要从右到左,它应该是parta[i-1] = parta[i-1] + 1。 <{1}}为0时,这会导致一些奇怪的行为,但您可能并不关心。

答案 2 :(得分:0)

只是为了好玩,这里是使用Ruby 2.4重新编写的版本(Intger#digits):

a = 59_864_417
b = 974_709_147

a, b = [a, b].sort

carry = false
count = b.digits.zip(a.digits).count do |m, n|
  r = m + (n || 0) + (carry ? 1 : 0)
  carry = r > 9
end

p count
#=> 6