C#程序流控制(二)——循环语句

C#提供了4种不同的循环机制(for、while、do...while和foreach),在满足某个条件之前,可以重复执行代码块。

一、for循环

C#的for循环提供的迭代循环机制是在执行下一次迭代前,测试是否满足某个条件,其语法如下:

for (initializer; condition; iterator):

statement( s)

其中:

 initializer 是指在执行第一次循环前要计算的表达式(通常把一个局部变量变量初始化为循环计数器)。

 condition是在每次循环的新迭代之前要测试的表达式(它必须等于true,才能执行下一次迭代)。

 iterator是每次迭代完要计算的表达式(通常是递增循环计数器)。

condition等于false时,迭代停止。

for循环是所谓的预测试循环,因为循环条件是在执行循环语句前计算的,如果循环条件为假,循环语句就根本不会执行。for循环非常适合用于一个语句或语句块重复执行预定的次数。下面的例子就是for循环的典型用法,这段代码输出0~99的整数:

for (int i = 0; i < 100; i = i + 1)

{

WriteLine( i);

}

 

这里声明了一个int类型的变量i,并把它初始化为0,用作循环计数器。接着测试它是否小于100。因为这个条件等于true,所以执行循环中的代码,显示值0。然后给该计数器加1,再次执行该过程。当i等于100时,循环停止。

实际上,上述编写循环的方式并不常用。C#在给变量加1时有一种简化方式,即不使用i=i+1,而简写为i++:

for(inti=0;i<100;i++)

{

//表达式

}

也可以在上面的例子中给循环变量i使用类型推断。使用类型推断时,循环结构变成:

for(var i=0;i<100;i++)

{

//表达式

}

嵌套的for循环非常常见,在每次迭代外部循环时,内部循环都要彻底执行完毕。这种模式通常用于在矩形多维数组中遍历每个元素。

最外部的循环遍历每一行,内部的循环遍历某行上的每个列。下面的代码显示数字行,它还使用另一个Console方法Console.Write(),该方法的作用与Console.WriteLine()相同,但不在输出中添加回车换行符:

using static System. Console;

namespace Rbsoft

{

class Program

{

static void Main()

{

// 这个循环遍历行 

for (int i = 0; i < 100; i+= 10)

{

 // 这个循环遍历

for (int j = i; j < i + 10; j++)

{

Write($" {j}");

}

WriteLine();

}

}

}

}

尽管j是一个整数,但它会自动转换为字符串,以便进行连接。上述例子的结果是:

0 1 2 3 4 5 6 7 8 9

10 11 12 13 14 15 16 17 18 19

20 21 22 23 24 25 26 27 28 29

30 31 32 33 34 35 36 37 38 39

40 41 42 43 44 45 46 47 48 49

50 51 52 53 54 55 56 57 58 59

60 61 62 63 64 65 66 67 68 69

70 71 72 73 74 75 76 77 78 79

80 81 82 83 84 85 86 87 88 89

90 91 92 93 94 95 96 97 98 99

尽管在技术上,可以在for循环的测试条件中计算其他变量,而不计算计数器变量,但这不太常见。也可以在for循环中忽略一个表达式(甚至所有表达式)。但此时,要考虑使用while循环。

二、while 循环

for循环一样,while也是一个预测试循环。其语法是类似的,但while循环只有一个表达式:

while(condition)

statement(s);

for循环不同的是,while循环最常用于以下情况:在循环开始前,不知道重复执行一个语句或语句块的次数。通常,在某次迭代中,while 循环 体中 的 语句 把 布尔 标志 设置 为 false, 结束 循环, 如下 面的 例子 所示:

bool condition = false;

while (! condition)

{

// 循环直至条件为true.

DoSomeWork();

condition = CheckCondition();

// 假定方法CheckCondition() 返回布尔型

}

三、do… while 循环 .

do...while循环是while循环的后测试版本。这意味着该循环的测试条件要在执行完循环体之后评估。因此do...while循环适用于循环体至少执行一次的情况:

bool condition;

do

{

// 此循环至少执行一次, 即使条件为false.

MustBeCalledAtLeastOnce();

condition = CheckCondition();

} while (condition);

四、foreach 循环

foreach循环可以迭代集合中的每一项。现在不必考虑集合的准确概念,只需要知道集合是一种包含一系列对象的对象即可。从技术上看,要使用集合对象,就必须支持IEnumerable接口。集合的例子有C#数组、System.Collection名称空间中的集合类,以及用户定义的集合类。从下面的代码中可以了解foreach循环的语法,其中假定arrayOfInts是一个int类型数组:

foreach (int temp in arrayOfInts)

{

WriteLine( temp);

}

其中,foreach循环每次迭代数组中的一个元素。它把每个元素的值放在int类型的变量temp中,然后执行一次循环迭代。这里也可以使用类型推断。此时,foreach循环变成:

foreach (var temp in arrayOfInts)

{

//表达式

}

temp的类型推断为int,因为这是集合项的类型。注意,foreach循环不能改变集合中各项(上面的temp)的值,所以下面的代码不会编译:

foreach (int temp in arrayOfInts)

{

temp++;

WriteLine( temp);

}

如果需要迭代集合中的各项,并改变它们的值,应使用for循环。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

掌控自身命运

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值