在ruby中结束关键字

时间:2013-01-31 07:20:06

标签: ruby

我只是尝试使用ruby从project-euler解决问题#45。我知道这个方法。但我写了代码,它没有运行。我是ruby的新手,我不知道为什么后面会有这么多“结束”关键字(否则终端会抱怨)

以下是代码:

class Test
    def initialize()

    end

    def Triangle(n)
        if 1 + 8*n < 0 then
            return false
        else
            i1 = 0.5 * (-1 + Math.sqrt(1 + 8*n))
            i2 = 0.5 * (-1 - Math.sqrt(1 + 8*n))
            cut_i1 = i1.to_i
            cut_i2 = i2.to_i
            if (cut_i1 == i1) & (i1 > 0)
                return true
            else if (cut_i2 == i1) & (i2 > 0)
                return true
            else
                return false
            end
        end
    end

    def Pentagonal(n)
        delta = 1 + 24*n
        if delta < 0 then
            return false
        else
            r1 = (1.0/6) * (1 + Math.sqrt(delta))
            r2 = (1.0/6) * (1 - Math.sqrt(delta))
            cut_r1 = r1.to_i
            cut_r2 = r2.to_i
            if (cut_r1 == r1) & (r1 > 0)
                return true
            else if (cut_r2 == r1) & (r2 > 0)
                return true
            else
                return false
            end
        end
    end 

    def Hexagonal(n)
        delta = 1 + 8*n
        if delta < 0 then
            return false
        else
            r1 = 0.25 * (1 + Math.sqrt(delta))
            r2 = 0.25 * (1 - Math.sqrt(delta))
            cut_r1 = r1.to_i
            cut_r2 = r2.to_i
            if (cut_r1 == r1) & (r1 > 0)
                return true
            else if (cut_r2 == r1) & (r2 > 0)
                return true
            else
                return false
            end
        end
    end
end
for i in (1...100)
    o = Test.new
    print o.Triangle(i)
end

end
end
end

发生了什么事。每次我从终端运行程序。它什么都没显示......

1 个答案:

答案 0 :(得分:6)

这是因为您使用的是else if而不是elsif。比较:

if cond
  # do something
elsif another_cond
  # do something else
end


if cond
  # do something
else
  if another_cond
    # do something else
  end
end

考虑到这一点,你的程序没有按照你的想法去做。修复elsif并查看。