我只是尝试使用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
发生了什么事。每次我从终端运行程序。它什么都没显示......
答案 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
并查看。