刚学RUBY 遇到问题请指教。谢谢。
$arr = []$arr = 2
def add_prime(n)
3.step(n,2){|num|$arr<<num if is_prime?num}
end
def is_prime?(number)
j = 0
while $arr * $arr <= number
return false if number % $arr == 0
j+=1;puts "okok"
end
return true
end
add_prime(5)
print $arr.join(","),"\n"
进到 while 里 每次都return false 后面的怎么执行啊。 俺运行你的程序,咋都是输出:
okok
2,3,5
没错吧? 应该是有执行后面的。 我就是不明白,满足条件后就应该return了。什么情况不returne 啊 。 程序没错,是我不大懂为什么 while 里的 return 后 还执行。 本帖最后由 2gua 于 2010-12-06 15:41 编辑
回复 5# 天空不也
你可以在while后加一条输出语句:puts "number = " + number.to_s + "; $arr = " + $arr.to_s,看看结果:
while $arr * $arr <= number
puts "number = " + number.to_s + "; $arr = " + $arr.to_s
return false if number % $arr == 0
j+=1; puts "okok"
end
输出:
number = 5; $arr = 2
而你要return false的条件是:number % $arr == 0,但此时number % $arr 为1,当然不会返回false了,应该是继续执行下一条的j+=1语句。不知道这么说你可以理解吗? 好的,理解了。写作C是这样是吧。
if(number % $arr == 0)
return false;
我原来以为
return false;
if(number % $arr == 0)
j=j+1;
谢谢喽。 回复 7# 天空不也
呵呵,这正是Ruby语法糖太甜的缘故了,要慢慢习惯Ruby的语法,另外,两条语句写在一行里,之间是要用分号隔开的哦,你那两条也没用分号隔开。 但如果return false是单独的语句,后面的语句是肯定不会执行到。
页:
[1]