Я пытаюсь создать программу, которая будет принимать ввод двух целых чисел размером 10 и ниже, что подсчитывает количество операций переноса в результате суммирования входных целых чисел.Ошибка при увеличении размера массива на 1 ошибка
Например:
Пример ввода:
Пример вывода:
Строка, которая возвращает ошибку в моей программе есть:
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
+»для ноль: NilClass (NoMethodError) из test5.ruby: 29: в downto' from test5.ruby:29:in
Может ли кто-нибудь мне помочь? :)
какая ошибка у вас есть? – mic4ael
Сообщение об ошибке я получаю: test5.ruby: 42: в 'блока в 'не определено методом' +' для ноль: NilClass (NoMethodError) \t из test5.ruby: 29: в' Downto» \t из test5.ruby : 29: in ' –
pugs
Я подозреваю, что есть более простой подход в целом, но для вашей конкретной проблемы: самый высокий индекс в массиве равен' 10', правильно? В этом случае, когда 'i' равно 10,' parta [i + 1] '(с правой стороны) является' nil', потому что в массиве с этим индексом нет элемента. Когда вы пытаетесь увеличить «nil», вы получите сообщение об ошибке. Разве это не должно быть 'parta [i-1] = parta [i-1] + 1'? – Max