Fixnum 与 nil 的比较失败 - 回文程序 Ruby
Comparison of Fixnum with nil failed - palindrome program Ruby
我正在为 Project Euler 中的问题 4 编写程序 - 在 3 位数的倍数中找到最大的回文。这是我写的:
def palintest(number)
num = number.to_s
len = num.length
if len % 2 != 0
num[(len/2).floor] = ''
end
if num[0.. (len/2)-1] == num [len/2..len].reverse!
return number
end
end
palindromes = []
for i in 100..999
for j in 100..999
palindromes << palintest(i*j)
end
end
puts palindromes.max
我收到一条错误消息:
comparison of Fixnum with nil failed
(repl):24:in `each'
(repl):24:in `max'
(repl):24:in `initialize'
我真的搞不懂到底发生了什么,我已经测试了程序的每个组件,它们似乎都可以正常工作。任何帮助将不胜感激。
乍一看,这是因为当 i*j 不是回文时,palintest(i*j) returns nil.
快速修复:
puts palindromes.reject(&:nil?).max
您有一堆要添加到数组中的 nils。 Max 不能与 nils 一起工作——它比较每个元素。只需添加 palindromes << palintest(i*j) if palintest(i*j)
但真正读起来可能更好:
def palindrome?(number)
num = number.to_s
len = num.length
num[(len/2).floor] = '' unless len.even?
num[0..(len/2)-1] == num[len/2..len].reverse # return boolean
end
palindromes = []
for i in 100..999
for j in 100..999
palindromes << (i * j) if palindrome?(i * j)
end
end
puts palindromes.max
我正在为 Project Euler 中的问题 4 编写程序 - 在 3 位数的倍数中找到最大的回文。这是我写的:
def palintest(number)
num = number.to_s
len = num.length
if len % 2 != 0
num[(len/2).floor] = ''
end
if num[0.. (len/2)-1] == num [len/2..len].reverse!
return number
end
end
palindromes = []
for i in 100..999
for j in 100..999
palindromes << palintest(i*j)
end
end
puts palindromes.max
我收到一条错误消息:
comparison of Fixnum with nil failed
(repl):24:in `each'
(repl):24:in `max'
(repl):24:in `initialize'
我真的搞不懂到底发生了什么,我已经测试了程序的每个组件,它们似乎都可以正常工作。任何帮助将不胜感激。
乍一看,这是因为当 i*j 不是回文时,palintest(i*j) returns nil.
快速修复:
puts palindromes.reject(&:nil?).max
您有一堆要添加到数组中的 nils。 Max 不能与 nils 一起工作——它比较每个元素。只需添加 palindromes << palintest(i*j) if palintest(i*j)
但真正读起来可能更好:
def palindrome?(number)
num = number.to_s
len = num.length
num[(len/2).floor] = '' unless len.even?
num[0..(len/2)-1] == num[len/2..len].reverse # return boolean
end
palindromes = []
for i in 100..999
for j in 100..999
palindromes << (i * j) if palindrome?(i * j)
end
end
puts palindromes.max