-2

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

这是代码:

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

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

4

1 回答 1

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's 并查看。

于 2013-01-31T07:21:20.713 回答