迭代(循环)语句

迭代语句的功能是在某个条件的控制下,让一对逻辑反复执行,反复执行的逻辑叫做循环体

迭代语句有四种:

1.while语句
2.do语句
3.for语句
4.foreach语句

while语句

当while关键字括号后面的布尔类型表达式值为true时,反复执行循环体
while语句的循环体可能执行一次或多次也可能一次也不执行

while(boolean-expression) embedde-statement
//这是while语句的语法

while关键字后面的圆括号输入bool类型表达式(循环条件),如果结果为true那么循环体就可以得到执行,如果是false那么循环体就得不到执行。

用while语句做一个小游戏,输入两个数字,如果它们的和是100就加1分,如果和不是100的话游戏结束并显示最终得分

 class Program{static void Main(string[] arge){var scroll = 0;bool con = true;while(con){Console.WriteLine("请输入数字1");var str1 = Console.ReadLine();Console.WriteLine("请输入数字2");var str2 = Console.ReadLine();int x = int.parse(str1);int y = int.parse(str2);int z = x + y;if(z == 100){Console.WriteLine("正确,{0} + {1} = {2}",x,y,z);scroll++;}else{Console.WriteLine("错误,{0} + {1} = {2}",x,y,z);con = false;}}Console.WriteLine("游戏结束,你的得分是{0}",scroll);}}

do…while语句
至少执行一次或多次循环体

do语句先执行一次循环体然后依while表达式的值来决定是否再次循环

  do embedde-statement while(boolean-expression)
//do语句语法

使用do语句实现刚才的小游戏

class Program
{static void Main(string[] arge){var scroll = 0;do{Console.WriteLine("请输入数字1");var str1 = Console.ReadLine();Console.WriteLine("请输入数字2");var str2 = Console.ReadLine();int x = int.parse(str1);int y = int.parse(str2);int z = x + y;if(z == 100){Console.WriteLine("正确,{0} + {1} = {2}",x,y,z);scroll++;}else{Console.WriteLine("错误,{0} + {1} = {2}",x,y,z);}}while(z==100);Console.WriteLine("游戏结束,你的得分是{0}",scroll);}
}

注意
无论使用while语句和do语句都能实现上述的小游戏,我们需要用哪个更好呢?

while可能一次也不执行循环体而do语句至少执行一次循环体,我们的小游戏肯定需要先玩也就是先执行循环体。(具体选择使用什么语句,只需要看需求的语境就可以得知使用什么语句)

for语句

for语句一般用于计算数字循环,for语句由for关键字,循环变量,循环条件(布尔类型表达式),循环变量的变化组成

for语句执行逻辑:
1. 编译器检测声明的变量
2. 循环条件计算后的值是true还是false
3. 为true则执行循环体,为false结束for语句
4. 最后执行所设置循环变量的变化

 for ( for-initializer(opt ) ; for-condition(opt) ; for-iterator(opt) ) embedded-statement //for语句语法

使用for语句打印10行"坚持就是胜利"

for(int i=0;i<10;i++)
{    Console.WriteLine("坚持就是胜利");
}

foreach语句

foreach语句通常用来集合遍历循环,枚举一个集合中的元素。也就是访问集合里的每个元素并且可以给每个访问的元素添加嵌入语句

并不是所有集合都可以被遍历,一个类冒号(:)后面跟的就是这个类的基类和基接口,这些单词以大写i开头的就是基接口。
只要类有IEnumerable基接口,就可以集合遍历

IEnumerable有一个方法叫GetEnumerator——获得当前集合的迭代器(c#所有能被遍历的集合都有自己的迭代器)

IEnumerator有一个object类型的Current属性,一个返回布尔类型的MoveNext方法和一个没有返回类型的Reset方法。
movenext如果还能继续访问元素就得到true反之为false
current获得当前访问的元素
reset将在集合中访问的迭代器拨回到最开始的位置


指月
你问我什么是月亮,我拿手指着月亮。我的意思是我指着的是月亮不是我的手指是月亮,天上有十个月亮我一个一个的指给你看。(手指就是迭代器,月亮就是集合中的元素,我一个一个指给你看)


foreaxh语句是集合遍历循环的"简记法"

如果不用foreach语句来进行集合遍历循环是这样的:

 List<int> intlist = new List<int>{1,2,3,4,5,6,7};IEnumetor enumetor = intlist.GetEnumerator;while(enumetor.MoveNext){Console.WriteLine(enumetor.Current);}

foreach语句语法

foreach(lacal-variable-type identifier in expression) embedded-statement

foreach关键字然后括号声明一个变量(这个变量就相当于迭代器),in关键字后面跟着一个表达式(表达式求出的值就是访问的集合),括号外输入一个嵌入式语句


使用foreach语句进行集合遍历循环:

List<int> intlist = new List<int>{1,2,3,4,5,6,7};
foreach(var enumetor in intlist)
{
Console.Writeline(Current);
}

两相比较之下使用foreach进行集合遍历循环会更简便

跳转语句

break语句

结束当前循环语句

以上述游戏为例子,当玩家玩腻了想要退出时可以用break退出游戏

class Program
{static void Main(string[] arge){var scroll = 0;do{Console.WriteLine("请输入数字1");var str1 = Console.ReadLine();Console.WriteLine("请输入数字2");var str2 = Console.ReadLine();if(str1 == "end" && str2 == "end"){break;}int x = int.parse(str1);int y = int.parse(str2);int z = x + y;if(z == 100){Console.WriteLine("正确,{0} + {1} = {2}",x,y,z);scroll++;}else{Console.WriteLine("错误,{0} + {1} = {2}",x,y,z);}}while(z==100);Console.WriteLine("游戏结束,你的得分是{0}",scroll);}
}

continue语句

放弃当前循环语句,立刻开始一次新的循环

放在上面的游戏例子中在玩家输入的不是数字字符使parse方法出现异常,屏幕会告诉玩家格式错误并重新开始游戏

 class Program{static void Main(string[] arge){var scroll = 0;do{Console.WriteLine("请输入数字1");var str1 = Console.ReadLine();Console.WriteLine("请输入数字2");var str2 = Console.ReadLine();        try{int x = int.parse(str1);int y = int.parse(str2);catch(FormatException){Console.WriteLine("输入的只能是数字字符哦");continue;}}int z = x + y;if(z == 100){Console.WriteLine("正确,{0} + {1} = {2}",x,y,z);scroll++;}else{Console.WriteLine("错误,{0} + {1} = {2}",x,y,z);}}while(z==100);Console.WriteLine("游戏结束,你的得分是{0}",scroll);}}

注意
无论是break还是continue在迭代语句中都只对包裹它们的那层循环起作用

goto语句

非主流语句,简单介绍:和名字一样"去到"或"跳转到"
跳出循环语句去到goto标识的语句

return语句
return语句只能在函数体里面使用,用于返回函数的结果,return之后就不会再执行return后面的语句了,结束了函数调用

return语句有一个原则——“尽早return”,下面举一个’‘尽早return’‘的例子和一个没有’‘尽早return’'的例子

//没有尽早return
class Program
{static void Main(string[] args){static void GetName(string name){if(!IsNullOrEmpty(name)){Console.WriteLine("Hello i is {0}",name);Console.WriteLine("You good? I is {0}",name);}return;//对于void而言写不写return都无所谓}}
}
//尽早return
class Program
{ static void Main(string[] args) {  static void GetName(string name)  {   if(IsNullOrEmpty(name)) {  return;}   Console.WriteLine("Hello i is {0}",name);                       Console.WriteLine("You good? I is {0}",name);}}
}

尽早return写出来的方法能让人更容易知道参数是什么值的时候是异常的。而且还能避免写出来的方法头重脚轻——如果方法的逻辑不是只有一行而是100行,100行之后才写return那么查找return的时候就显得很繁琐


这节课讲了

1.迭代(循环)语句
2.跳转语句

还有一些语句
using语句
yield语句
checked和unchecked语句
lock(用于多线程)语句
标签语句
空语句

其中using语句yield语句和lock语句在后续讲解

checked和unchecked语句以及标签语句和空语句不太常用不进行详细讲解

c#学习第16课,迭代(循环)语句 跳转语句相关推荐

  1. 15-07-05 语句-跳转语句异常语句

    跳转语句: break: 跳出的意思, 如果在循环语句中使用则是跳出循环 default, 通常与 switch case 配合使用 continue 继续 return 返回值 异常语句: try- ...

  2. Python学习日志16 - 数据库SQL查询

    Python学习日志 RBHGO的主页欢迎关注 温馨提示:创作不易,如有转载,注明出处,感谢配合~ 目录 文章目录 Python学习日志 目录 Python学习日志16课 - 数据库SQL查询 DQL ...

  3. C++primer 第 5 章语句 5.2语句作用域 5.3条件语句 5 . 4 迭代语句 5.5跳转语句 5.6 try语句块和异常处理

    5 . 1 简单语句 C++语言中的大多数语句都以分号结束,一个表达式,比如ival + 5 , 末尾加上分号就变成了表达式语句(expression statement).表达式语句的作用是执行表达 ...

  4. 【C++学习笔记】类型转换和跳转语句

    一.类型转换   在C++语言中,如果两种类型由关联,那么当程序需要其中一种类型的运算对象时,可以用另一种类型的对象或值来替代,即如果如果两种类型可以相互转换(conversion),那么它们就是关联 ...

  5. php循环 跳转语句,golang循环跳转语句

    golang循环跳转语句 跳转语句 goto break continue 三个语法都可以配合标签使用 标签名区分大小写,若不使用会造成编译错误 break与continue配合标签可用于多层循环的跳 ...

  6. Python学习笔记05----条件、循环及其他语句

    Print和Import 打印多个参数 1.打印多个表达式,条件是用逗号隔开它们:表达式可以是字符串,也可以自动转换为字符串: >>> print('Age:', 42) Age: ...

  7. Linux shell 学习笔记(9)— 循环语句(for、while)以及更改字段分隔符

    1. for 语句 bash shell 中 for 命令的基本格式如以下,$var 变量包含着这次迭代对应的当前列表项中的值. for var in list docommands done 也可以 ...

  8. Verilog学习----条件语句、循环语句、块语句与生成语句

    1.条件语句(if_else语句) 3钟形式的if语句: 1)if(表达式)语句.如 if(a>b) out1 = int1; 2)if(表达式) 语句: else 语句:如 if(a>b ...

  9. python输入end退出循环_4.学习python获取用户输入和while循环及if判断语句

    0x00 Abstract 在开发中为了增加程序与用户的互动性需要增加获取用户输入的功能,在python中可以使用input()函数来获取用户的输入.当获取用户的各种输入后,我们需要使用逻辑语句来对数 ...

最新文章

  1. 在 Linux 下忘记 mysql root 密码的解决方法
  2. 怎么进入python官网-Python的安装及简单的使用
  3. 移动端双指缩放、旋转
  4. All in会员经济的知乎,能否实现商业化大跃进?
  5. 2020ICPC(上海) - Walker(分类讨论+二分)
  6. java反射的field.get(null)
  7. c语言 malloc_C语言快速入门——动态内存分配
  8. linux手动安装mysql8.16,MySQL8.0.16-linux-x64安装介绍(binary package)
  9. python识别验证码并自动登录_Python完全识别验证码自动登录实例详解
  10. unity3d 注册表 Regedit
  11. java算法编程题:某年某月某日是这一年的第几天
  12. CF506C Mr. Kitayuta vs. Bamboos
  13. pta中java编程题_多文件编程题
  14. centos yum 本地源配置
  15. 【蓝桥杯——单片机学习笔记】十二.LCD1602(STC15F2K60S2)
  16. C#,蛇梯问题(Snake and Ladder Problem)的算法与源代码
  17. 提示dns服务器未响应,网络诊断提示DNS服务器未响应解决方法_
  18. Mac Word 修改默认的模板
  19. 10-9 查询年龄18-20之间的学生信息(MSSQL)
  20. mac mini 键盘调节显示器亮度

热门文章

  1. Ubuntu16.04 x64服务器配置最新tcp拥塞控制算法bbr
  2. Arduino开发实例-DS3231实时时钟+LCD显示
  3. 关于 IPv6 你需要知道的 10 件事
  4. 消消乐实现下坠_消消乐游戏算法实现
  5. Form2(子窗体)调用Form1(父窗体)的控件
  6. 海量监控数据处理之道(一):APM指标计算优化
  7. 程序员必须掌握的英文单词(一)
  8. 华硕Z390P主板-win10-ubuntu18.04双系统安装记录(20200626)
  9. 第二章-Coin Dash
  10. 实验二 配置Trunk和链路汇聚