我是编程的全新手,并通过Ruby使用Proj Euler。为什么这个红宝石循环不会破裂?
(1..5).each do |a|
(1..5).each do |b|
e=(a*a)+(b*b)
c=Math.sqrt(e)
puts "a=#{a}, b=#{b}, c=#{c}"
break if a+b+c == 12
end
end
请注意,如果我在if语句中添加任何其他内容(例如,如果a + b + c == 12,则将其设为“找到它”)它的工作正常,它就不会中断
答案 0 :(得分:3)
答案 1 :(得分:1)
以下代码可能是您想要做的事情
(1..5).each do |a|
break unless (1..5).each do |b|
e=(a*a)+(b*b)
c=Math.sqrt(e)
puts "a=#{a}, b=#{b}, c=#{c}"
break if a+b+c == 12
end
end
当在循环中触发break时,循环的返回值变为break值,在这种情况下为nil
。在其他情况下,返回(1..5)
。所以这段代码可行。
答案 2 :(得分:1)
正如其他人所说,break
只会结束内循环。
您可以重写代码,例如:
[*1..5].product([*1..5]).map{|a, b| [a, b, Math.sqrt(a*a+b*b)]}.each do |a, b, c|
puts "a=#{a}, b=#{b}, c=#{c}"
break if a + b + c == 12
end
现在,break
将按预期工作。