一. while(当…) 循环
while 条件
语句1; 语句2 ; 语句…
end
二. 单行 while 循环
( 语句1; 语句2 ; 语句… ) while 条件
三. until(直到…) 循环
我们想输出数字1到9,看程序 E3.10-1.rb,E3.10-2.rb :
a=1
while a <10
print a," "
a=a+1
end
# => 1 2 3 4 5 6 7 8 9
|
a=1
until a >=10
print a," "
a=a+1
end
# => 1 2 3 4 5 6 7 8 9
|
一边是while a <10,一边是until a >=10,其它代码都一样,结果也一样。从这两个小程序可以看出: until 条件 = while not (条件)
四. for…in 循环
for 变量 in 对象
语句1; 语句2 ; 语句…
end
对象可以是数组,区间,集合…, 看程序 E3.10-3.rb:
- # E3.10-3.rb
- for i in 1..9
- print i," " # => 1 2 3 4 5 6 7 8 9
- end
五.break , next & redo & retry
在循环体内,如果遇到:
break ,跳出当层循环;
next ,忽略本次循环的剩余部分,开始下一次的循环;
redo ,重新开始循环,还是从这一次开始;
retry ,重头开始这个循环体。
1).看程序 E3.10-5.rb 。
- puts "演示break"
- c='a'
- for i in 1..4
- if i == 2 and c =='a'
- c = 'b'
- print "\n"
- break
- end
- print i,c," "
- end
- puts "\n\n"
#=>演示break
1a
变量 c 在循环体之前赋值为 'a' ,程序执行了 2 次,遇到 break ,退出了本层循环,不再执行第 2 次的print i,c," "。
2).看程序 E3.10-5.rb 。
- puts "演示next"
- c='a'
- for i in 1..4
- if i == 2 and c =='a'
- c = 'b'
- print "\n"
- next
- end
- print i,c," "
- end
- puts "\n\n"
#=>演示next
1a
3b 4b
变量 c 在循环体之前赋值为 'a' ,程序执行到第 2 次,c 又赋值为 'b',遇到 next ,退出了本次循环,不再执行第 2 次的print i,c," ",开始第 3 次循环,此时,c = 'b',i = 3。
3).看程序 E3.10-5.rb 。
- puts "演示redo"
- c='a'
- for i in 1..4
- if i == 2 and c =='a'
- c = 'b'
- print "\n"
- redo
- end
- print i,c," "
- end
- puts "\n\n"
#=>演示redo
1a
2b 3b 4b
变量 c 在循环体之前赋值为 'a' ,程序执行到第 2 次,c 又赋值为 'b',遇到 redo ,重新开始循环,还是从这一次开始 ,此时,c = 'b',i = 2。
4).看程序 E3.10-5.rb 。
- puts "演示retry"
- c='a'
- for i in 1..4
- if i == 2 and c =='a'
- c = 'b'
- print "\n"
- retry
- end
- print i,c," "
- end
- puts "\n\n"
#=>演示retry
1a
1b 2b 3b 4b
变量 c 在循环体之前赋值为 'a' ,程序执行到第 2 次,c 又赋值为 'b',遇到 retry ,重头开始这个循环体 ,此时,c = 'b',i = 1。
六. 求50以内的素数。
- # E3.10-4.rb 求50以内的素数
- for i in 2..50 #50以内
- f=true #起始假定每个数都是素数
- for p in 2...i #比自身小的正整数(1和自身除外)
- if i%p==0 #如果能整除
- f=!f #那么这个数不是素数
- break #并且跳出这层循环
- end # if 结束
- end #内层循环结束
- print i," " if f #如果这个数保持起始假定,则打印
- end #外层循环结束
# => 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
E3.10-6.rb 这个小程序不是最优化的,你可以复制到自己的编辑器内,试着反复重构优化。
完整阅读,请看我写的 Ruby语言中文教程all in one