本帖最后由 琳lin爱妮爱 于 2014-7-6 17:03 编辑
五、循环控制语句
首先来说说区间的表示方法:使用..与...
1..5 表示1,2,3,4,5
1...5 表示1,2,3,4 <---【不含最后一个数】
请注意两者的区别
1.while...end
例如:这里我们想输出1到5
i = 1 while i <= 5 print i i = i + 1 end #输出 12345
i = 1
while i <= 5
print i
i = i + 1
end
#输出 12345
2.until...end
until是直到的意思,也就是直到条件满足了就不再执行以下语句的意思,相当于while not
这里同样输出1到5
i = 1 until i > 5 print i i = i + 1 end #输出12345
i = 1
until i > 5
print i
i = i + 1
end
#输出12345
3.使用while 、until修饰符,构成如下结构:
语句 while 条件
语句 until 条件
另外,当前面的语句有两句以上时,使用()构成如下结构:
( 语句1; 语句2 ; 语句… ) while 条件
( 语句1; 语句2 ; 语句… ) until 条件
但是语句超过两句以上时,还是使用while...end与until...end为好。
以上规则可以类比于选择判断语句。
4.for...in...end
sum = 0 for i in 1..5 sum = sum + i end p sum #sum等于1加到5的和
sum = 0
for i in 1..5
sum = sum + i
end
p sum #sum等于1加到5的和
另外,in后面接的对象不只可以是区间,还可以是数组、集合等等。
5.loop do...end
没有结束条件,不断进行循环处理
i = 0 loop do i = i + 1 p i end #一直循环
i = 0
loop do
i = i + 1
p i
end #一直循环
此语句需要配合循环控制语句跳出循环。
6.break 、next 、redo
break
跳出当层循环,即中断循环
例如:
sum = 0 for i in 1..5 break if i == 3 #当i等于3时,中断循环 sum = sum + i end p sum #sum等于1+2
sum = 0
for i in 1..5
break if i == 3 #当i等于3时,中断循环
sum = sum + i
end
p sum #sum等于1+2
另外break能够中断本block的调用方法的执行,跳至调用“本block的调用方法”的方法中。【此处可先不管】
next
忽略本次循环的剩余部分,开始下一次的循环
例如:
sum = 0 for i in 1..5 next if i == 3 #当i等于3时,跳出本次循环,继续执行i = 4 时的循环 sum = sum + i end p sum #sum等于1+2+4+5
sum = 0
for i in 1..5
next if i == 3 #当i等于3时,跳出本次循环,继续执行i = 4 时的循环
sum = sum + i
end
p sum #sum等于1+2+4+5
另外next的能够中断本block的执行,跳至它的调用方法中。【此处可先不管】
redo
重新启动当前的循环,不检查判断条件,以当前的条件重复一次动作
例如:
for i in 1..3 p i i = i + 1 redo if i==2 end #输出 1223
for i in 1..3
p i
i = i + 1
redo if i==2
end
#输出 1223
7.times 、upto 、downto 、each 、step
times
反复次数.times{ |变量|
反复执行的动作
}
中间的变量也可以省去。
例如:
3.times { #大括号一定不要换行 print "Hi!" } #Hi!Hi!Hi!
3.times { #大括号一定不要换行
print "Hi!" } #Hi!Hi!Hi!
由于C系语言的格式,大家很容易看到 '{ ' 就会习惯性的换行处理,但是在这里是不可以这样写的,因为Ruby的换行就等同于断句。
切记不可以写成
3.times { print "Hi!" } #程序报错
3.times
{
print "Hi!" } #程序报错
upto与downto
1.upto(9) {|i| print i if i<7 } #123456
1.upto(9) {|i| print i if i<7 } #123456
9.downto(1){|i| print i if i<7 } #654321
9.downto(1){|i| print i if i<7 } #654321
each
(1..9).each {|i| print i if i<7} #123456
(1..9).each {|i| print i if i<7} #123456
each方法是基本的循环方式,其实for是用each实现的特殊语法
step
0.step(11,3) {|i| print i } #0369【可以理解为,从0开始到11,输出以3为倍数的数】
0.step(11,3) {|i| print i } #0369【可以理解为,从0开始到11,输出以3为倍数的数】
另外{}与do...end两者可以通用
例如:
3.times do print "Hi!" end #Hi!Hi!Hi!
3.times do
print "Hi!"
end #Hi!Hi!Hi!
|