第十一回:大刑伺候,Rust 循环
公堂之上,重复劳动最累人。Rust 提供了三种刑具(循环方式)来帮你自动执行重复任务:loop, while, 和 for。
1. loop (无限循环 / 死刑)
loop 是最简单的循环,它会一直执行,直到你喊停(break)。
fn main() {
let mut count = 0;
loop {
count += 1;
println!("打了方唐镜第 {} 板!", count);
if count == 100 {
println!("行刑完毕,拖下去!");
break; // 必须手动喊停,否则打到天荒地老
}
}
}
进阶技巧: loop 也可以作为表达式返回值!
let result = loop {
count += 1;
if count == 10 {
break count * 2; // 循环结束,返回 count * 2
}
};
2. while (有条件循环 / 缓刑)
只要条件满足,就一直打。条件不满足,立刻停手。
fn main() {
let mut energy = 3; // 侍卫的体力
while energy > 0 {
println!("用力打!还剩体力:{}", energy);
energy -= 1;
}
println!("侍卫累趴下了,退堂!");
}
3. for (遍历循环 / 挨个点名)
这是 Rust 最强大、最安全的循环。它可以遍历任何序列,绝不会越界。
fn main() {
// 遍历数字范围 1 到 5 (包含 1,不包含 5)
for i in 1..5 {
println!("第 {} 号证人上堂!", i);
}
// 遍历数字范围 (包含 5)
for i in 1..=5 {
println!("包含第 {} 号!", i);
}
// 遍历数组
let suspects = ["常威", "来福", "方唐镜"];
for name in suspects.iter() {
println!("带嫌犯:{}", name);
}
}
我全都要!能不能在循环里再套个循环?比如每个人打十板?
当然可以!这就是嵌套循环。你还可以给循环起名字(标签),想跳出哪层跳哪层!
4. 循环标签 (精准打击)
fn main() {
'outer: for person in ["常威", "来福"] {
'inner: for i in 1..=3 {
println!("打 {} 第 {} 下", person, i);
if person == "常威" && i == 2 {
println!("常威晕过去了,别打了!");
break 'inner; // 只跳出内层循环,继续打来福
}
}
}
}
动手时刻:复读机
方唐镜在公堂上一直喊 "我是冤枉的",喊了 10 遍。请用 for 循环帮他喊出来。
fn main() {
// 你的代码
}