跟siki老师学C#第四天(学习部分)
来源:互联网 发布:手机淘宝视频下载 编辑:程序博客网 时间:2024/04/20 23:20
上节课的最后我们介绍了if判断分支,我们接着介绍流程控制里面的分支:
除了之前说的if-else分支之外,我们还有另一个分支:switch-case分支。
switch-case分支:
int num = Convert.ToInt32(Console.ReadLine());switch(num){ case 0: Console.WriteLine("您输入的数字是0"); break; case 1: Console.WriteLine("您输入的数字是1"); break; case 2: Console.WriteLine("您输入的数字是2"); break; case 3: Console.WriteLine("您输入的数字是3"); break; case 4: Console.WriteLine("您输入的数字是4"); break; //case还可以放在一起: case 5: case 6: Console.WriteLine("您输入的值已经到达边界值!"); break; default: Console.WriteLine("您的输入有误!"); break;}Console.ReadKey();
在switch-case分支中,switch是判断条件,case是分支,上面这个语句首先在switch中判断num的值,当num等于0时,执行case 0后面的语句,当num等于1时,执行case 1后面的语句,当num等于2时,执行case 2后面的语句,以此类推。
最后有个default,意思是“默认”,就是说当switch中的判断条件不为case后面的所有值时,就认为它的值是默认的,就执行default后面的语句。
上面说的if、if-else、switch-case都是分支语句,下面介绍循环语句:while循环、do-while循环和for循环
while循环:
int num = 0;while(num<=20){ Console.WriteLine(num); num++; //如果不加上这一句,num就恒等于0,它小于20就恒成立,所以Console.WriteLine(num)会一直执行下去就是一个死循环}
while后面就是判断条件,它判断返回的结果是是bool值,只有它的判断条件是True时,才会执行花括号里面的语句,当判断条件为False时,while根本不理会你,因为你不够格,没有权利让我执行我里面的代码了。
这里要注意不要弄出死循环了!!!
while循环之后我们就学习do-while循环,其实这两个是相似的:
int num = 0;do{ Console.WriteLine(num); num++;}while(num<=20);
根据代码自上而下的顺序我们可以看出do-while循环实际上是先执行循环体,然后才进行条件判断,它和while的区别就像a++和++a的区别一样。
它们都是判断while里面的条件,但不同的是do-while循环中循环体的执行次数大于等于1,而while循环中循环体的执行次数则是大于等于0.一般do-while循环不常用,大多数情况下用while循环要比do-while循环更方便一些。
无论是do-while循环还是while循环,它们有一个共同点:容易产生死循环,这是相对于for循环来说的,接下来说说for循环来解释一下:
for (int i = 0; i <= 20;i++ ) //注意for循环括号里面的内容的执行顺序;初始化可以不写;条件变化也可以不写;判断条件也可以不写,但那样的话就是死循环了{ Console.WriteLine(i);}
这里说的不写不是说不需要写,而是可以不用放在这里来写,可以放到别的位置来写:
int num = 0;for (; num <= 20; )//可以不写,但是格式要保持{ Console.WriteLine(num); num++; //依具体情况选择条件变化}
我们看,for循环中一般都有类似于上面“num++”的语句,无论num多小,也无论判断条件有多大,for循环总有终止的时候,(一般情况下都会终止,但是极个别会出现没有“num++”语句,那就是死循环了)。
我们在写for循环的时候一般会下意识地写:
for(int i=0;i<=var;i++){ //balabalabalabala}
这里我们顺带着就把条件以及上下限确定了,但是while循环和do-while循环判断的时候只是简单的判定,范围还是要特意去写,稍有遗漏就容易造成死循环。
但是我们有时候也可以利用死循环这一特性:
while(true){ int i = Convert.ToInt32(Console.ReadLine()); if(i==0) { Console.WriteLine("抓住0号了!"); break; }}Console.ReadKey();
只要我没有输入0,这个循环就根本停不下来!利用这个特性我们可以实现很多逻辑功能。三种循环方式都是相通的,一种方法可以实现,稍微改变一下就可以用另一个方法来实现。
到这里我们流程控制的分支和循环就已经学习完毕了。
在循环控制里面我们还有一个知识点没有说明:死循环或者说普通循环怎么跳出?
在执行某个循环的时候,我想让程序在某一个循环的时候当即停止循环,跳到这个循环的外面,怎么办呢?
我们上面有一个没说明的break就是解决这个问题的:
while(true){ int i = Convert.ToInt32(Console.ReadLine()); if(i==0) { Console.WriteLine("抓住0号了!"); break; }}Console.ReadKey();
还是这个例子,不输入0的时候就是一个死循环,输入0之后我们达到目的了,这个循环体就没有必要继续循环了,所以我们要跳出,用到了break!
break是跳出离它最近的循环体!!!break是跳出离它最近的循环体!!!break是跳出离它最近的循环体!!!重要的事情说三遍,至少这是我不太了解的地方。
如:
while (true){ while (true) { int i = Convert.ToInt32(Console.ReadLine()); if (i == 0) { Console.WriteLine("抓住0号了!"); break; } } Console.WriteLine("这是内循环!");}Console.WriteLine("这是外循环!");Console.ReadKey();
从结果中,我们可以明确看到,它是跳出了从第三行开始,第十一行结束的循环体,而不是从第一行开始,第十四行结束的循环体。
为什么要强调break是跳出距离它最近的循环体呢?那是因为循环嵌套的使用时要注意break跳出的正确位置,分析失误的话有可能会出现隐患的。
况且跳出语句也不止break一种,我们之前介绍了goto语句,显然,goto语句的特性也可以用来跳出循环,还是那句话:不推荐使用goto语句,它会使代码的阅读性变差。
另外还有一种语句经常能用到:return。
return就比较霸道和强势了,我们说跳出暂时只是说跳出循环体,而return则是跳出当前方法,这是什么概念?暂时只要知道一个方法可以包含无数个循环体就好了。
对了,还有一个很重要且经常能用到的语句差点忘了,那就是:continue!
要说它们几个跳出的方法有没有比较相近的,那continue和break要更近一些,goto不推荐用,就不考虑,return太强悍,就剩continue和break了。
break是剩下的语句不继续执行了,跳出当前循环,循环就终止了;而continue则是剩下的语句不继续执行了,跳过当前循环,进入下一个循环,循环还在继续!
这就是两者的区别,我们看一个实例:
int sum = 0;while (true){ int num = Convert.ToInt32(Console.ReadLine()); if (num % 2 != 0) { Console.WriteLine("您本次输入的是奇数,不能加进去!"); continue; } else { sum += num; Console.WriteLine("现在的结果是" + sum); if (sum >= 100) { Console.WriteLine("最终的结果是" + sum); break; } }}
当输入的数字是奇数时,下面的语句不执行了,进入下一个循环(要求用户输入),知道最终的和大于等于100时,循环才被终止。
以上是跳出循环的几种方法。
今天的学习内容大概就是这些,来总结一下:
我们说了if分支、if-else分支,今天继续说了switch-case分支;
分支介绍完毕后,介绍循环:while循环、do-while循环和for循环;
接着就是循环跳出的几种方法:break、return、goto、continue,其实也不能说是循环跳出,说循环终止更准确些吧。
今天学习就到这里,欢迎大家对内容进行批评指正,万分感谢!
接下来用博客记录十三道练习题吧!
- 跟siki老师学C#第四天(学习部分)
- 跟siki老师学C#第四天(练习部分)
- 跟siki老师学C#第六天(练习部分)
- 跟siki老师学C#第二天
- 跟siki老师学C#第六天
- 跟siki老师学C#第一天
- 跟siki老师学C#第五天
- 跟siki老师学C#第七天
- 跟siki老师学C#第八天
- 跟siki老师学C#第三天(上)
- 跟siki老师学C#第三天(下)
- 跟siki老师学C#第九天(满满的都是练习)
- 跟学韩顺平老师学习java-servlet篇之一
- 面试siki老师失败
- 跟天齐老师学Spark(1)--Spark简介
- 跟我学C语言(第四天)
- 跟我一学linux基础(第四天)
- 开始跟贺老师学编程了
- C++ Aggregate 与 POD(Plain Old Data)的解释
- C++入门(18):模板
- Windows 7 创建逻辑分区
- IO复用函数--Select,poll,epoll的比较
- 有一个正整数N可以分解成若干个正整数之和,问如何分解能使这些数的乘积最大?
- 跟siki老师学C#第四天(学习部分)
- Android 使用OkHttp支持HttpDNS
- iOS 开发学习之 User Interface(8)UIScrollView 与 数据持久化
- Python+selenium自动化环境搭建
- Extjs配置菜单
- BZOJ-1927 星际竞速 最小费用最大流+拆点+不坑建图
- Js操作Select大全(取值、设置选中等等
- 使用hadoop过程中两次datanode无法启动问题
- 从头认识java-18.2 基本的线程机制(3)-线程的返回与sleep