一. 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