2017-01-28 16 views
0
私は単純な作業で解決しようとしている

:2 3桁の数字の積から作られた最大の回文を見つけた:ルビーNoMethodエラー

def is_palindrome?(number) 
    number = number.to_s 
    while number.length > 1 
    return false if number[0] != number[number.length - 1] 
    number = number[1, number.length - 2] 
    end 
    return true 
end 

def find_max_palindrome 
    x, y, z = 100 
    max = 1 
    while x < 1000 
    while y < 1000 
     z = x * y 
     max = z if is_palindrome?(z) 
     y += 1 
    end 
    x += 1 
    end 
    return max 
end 

puts find_max_palindrome 

しかし、何かがうまくいかない:

004.rb:14:in `find_max_palindrome': undefined method `<' for nil:NilClass (NoMethodError) 
     from 004.rb:24:in `<main>' 

缶誰かが私が間違ってどこに行くか教えてください?

答えて

1

ウォッチは、この1

x, y, z = 100 
=> 100 
2.4.0 :002 > x 
=> 100 
2.4.0 :003 > y 
=> nil 
2.4.0 :004 > z 
=> nil 

あなたは100からxyzを割り当てません

x = y = z = 100 
1
x, y, z = 100 

のようなものを意味します。 100xにのみ割り当てられます。これにより、yがまだnilであるため、while y < 1000行にエラーが発生します。

x = y = z = 100 

それとも私が読み、理解しやすいと思い、以下に:に並ぶ

変更

x = 100 
y = 100 
z = 100