.NET Core CSharp初级篇 1-2 循环与判断
.NET Core CSharp初级篇 1-2
本节内容循环与判断
循环
循环是一个在任何语言都是极为重要的语法,它可以用于很多东西,例如迭代数组等等。在C#中,语法层面的循环有:for , foreach ,while,do goto五种。循环你可以理解为当某条件满足时,重复的执行一段代码。接下来我们开始讲讲这五种循环的使用方法及优缺点。
for 循环
for循环可以说是最为常用的循环方式了,for循环时由以下部分组成:
- 起始条件
- 循环条件
- 状态改变方式
这是大多数语言for循环的组成,例如以下例子
for(int i =0;i<5;i++)
{
//表示从i=0开始,每次i+1,当i<5的时候跳出循环
//并且每次循环开始都会判断循环条件是否满足,如果满足则会继续进行循环
}
非常简单,对吧。状态改变方式可以是多样的,你可以把它改成 i = i+2 等等各种方式。
foreach 循环
foreach循环在其他语言中有着不同的实现方式,但是在C#中,foreach是遍历每一个元素并返回,而for循环你可以简单的理解位循环 i 当 i 满足时跳出。不过foreach循环并不是每一个有集合或者数组属性的东西都可以循环,使用foreach循环的前提就是该元素集合必须继承IEnumerable接口。因为foreach在遍历元素的时候,第一次遍历会调用GetEnumerator()方法将第一个元素赋值给循环的临时变量,之后每次调用MoveNext()方法,直到循环结束。看下面例子。
foreach(var a in list)
{
/*
第一次时调用GetEnumerator()将第一个变量赋值给a,然后调用MoveNext()将后续变量赋值给a
*/
}
while 循环
while循环是单条件循环,也是一个非常常用的循环,在指定的布尔表达式的计算结果为 true 时,while语句会执行一条语句或一个语句块。 由于在每次执行循环之前都会计算此表达式,所以while循环会执行零次或多次。例:
while(expression)
{
//当expression为真时,才会继续循环。
}
do 循环
do循环也被称为 do......while 循环,它的原理和while循环时一样的,都是当表达式为真的时候进行,但是不同于while的是,如果表达式一开始就为假,while循环不会执行循环体内的代码,而do循环会至少执行一次(通常是一次,除非你在循环体内对表达式结果进行了修改)。
do
{
//todo
}while(expression)
goto 循环
事实上goto不能称之为循环,但是它确实可以实现类似于循环的功能。但是它也可以作为跳出循环的一种方式,不过在判断语句中也会有它的用物之地,在后面的判断介绍中我会进行详细的说明。
lb:
//todo 这表示在lb到goto lb之间循环
goto lb;
while(true)
{
//作为跳出循环的方式
goto finish;
}
finish:
//todo
判断
在C#中实现判断的方式通常有三种方式
- if else if else语句
- switch 语句
- 三元表达式?
if 语句
if语句基于布尔表达式的值来识别运行哪个语句,需要注意的是,if判断结果如果为真的话,后面的else if和else都不再进行判断。例如:
if(condition)
{
if(condition3)
{
//嵌套判断,满足上一级条件又满足下一级条件
}
}
else if(condition1)
{
}
else if(condition2)
{
}
else
{
}
若condition验证为真,后面的condition都不再进行判断。if语句总体来说还是非常简单的
switch 语句
switch语句也称为开关语句,它根据与匹配表达式 匹配的模式,从候选列表中选择单个开关部分 进行执行。如果其中一个条件满足的时候,开关打开,运行其中的代码。每一个开关都应该有相应的跳出语句。特别的,之前讲到的goto就可以作为跳转的语句。例如:
//i是一个变量,不是表达式
switch(i)
{
case 1:
break;
case 2:
goto case 1;
default:
break;
}
三元表达式?
?表达式其实是一个只能判断两种结果的表达,也就是是能判断true和false,用法和 if 语句是一致的。直接看例子吧:
int a =3;
int b = 0;
//这个意思是a==3为真的话,那么b=10,如果为假,b=5
a ==3?b=10:b=5;
几点补充
循环的跳出:
循环跳出有三种方式,
- break
- continue
- goto
break是指跳出整个循环,直接运行后面的代码,continue是指跳过本次循环,直接进入下一次循环条件判断,而goto就是指跳转到指定的标签位置。比较需要注意的就是break跳出和continue跳出的方式,本质区别就是一个为终止循环,一个是跳过本次。
运算的简写
这个本来应当在上一节进行讲解的,但是考虑到这个写法在循环中运用比较多,因此在本节进行讲解。
看以下例子
int i =0;
i+=2;//等价于i = i + 2
//请问下面这两种有何区别?
int b = ++i;
b = i++;
//如果运算符在前,例如++i,表示先进行i=i+1操作,然后进行赋值,i++表示先进行赋值,随后进行加法操作
练习题
请问下列两种判断,哪种效率高?为什么?
//Sample1:
if(a>5)
//todo
else if(a==5)
//todo
else
//todo
//Sample 2:
if(a>5)
//todo
if (a==5)
//todo
else
//todo
利用switch语句,实现输入1,输出星期1,输入2,输出星期二
请试着使用循环实现数组的访问、累加等操作
试问该循环一共运行多少次
for(int i = 0;i<9;++i)
for(int j =0;j<7;j++)
前往Github获取更多本节资料(PPT,实例代码)
如果我的教程帮到了您,希望您动动小手,在GitHub给我一个star
.NET Core CSharp初级篇 1-2 循环与判断的更多相关文章
- .NET Core CSharp初级篇 1-1
.NET Core CSharp初级篇 1-1 本节内容是对于C#基础类型的存储方式以及C#基础类型的理论介绍 基础数据类型介绍 例如以下这句话:"张三是一名程序员,今年15岁重50.3kg ...
- NET Core CSharp初级篇 1-3面向对象
.NET Core CSharp初级篇 1-3 本节内容为面向对象初级教程 类 简介 面向对象是整个C#中最核心最有特色的一个模块了,它很好的诠释了程序与现实世界的联系. 面向对象的三大特征:继承.多 ...
- .NET Core CSharp初级篇 1-5 接口、枚举、抽象
.NET Core CSharp初级篇 1-5 本节内容类的接口.枚举.抽象 简介 问题 如果你需要表示星期或者是某些状态,使用字符串或者数字是否不直观? 你是否发现,无论何种电脑,它的USB口的设计 ...
- .NET Core CSharp初级篇 1-6 类的多态与继承
.NET Core CSharp初级篇 1-6 本节内容为类的多态与继承 简介 终于讲到了面向对象三大特性中的两大特性--继承与多态.通过继承与多态,我们能很好的将类的拓展性发挥到了极致.在下面的内容 ...
- .NET Core CSharp初级篇 类的生命历程
.NET Core CSharp初级篇 1-7 本节内容为类的生命周期 引言 对象究竟是一个什么东西?对于许多初学者而言,对象都是一个非常抽象的知识点.如果非要用一句话描述,我觉得"万物皆对 ...
- .NET Core CSharp初级篇 1-8泛型、逆变与协变
.NET Core CSharp初级篇 1-8 本节内容为泛型 为什么需要泛型 泛型是一个非常有趣的东西,他的出现对于减少代码复用率有了很大的帮助.比如说遇到两个模块的功能非常相似,只是一个是处理in ...
- CSharp初级篇 1-4 this、索引器、静态、常量以及只读
.NET Core CSharp初级篇 1-4 本节内容为this.索引器.静态.常量以及只读 简介 在之前的课程中,我们谈论过了静态函数和字段的一小部分知识,本节内容中,我们将详细的讲解关于对象操作 ...
- .NET Core CSharp 中级篇 2-2 List,ArrayList和Dictionary
.NET Core CSharp 中级篇 2-2 本节内容为List,ArrayList,和Dictionary 简介 在此前的文章中我们学习了数组的使用,但是数组有一个很大的问题就是存储空间不足,我 ...
- .NET Core CSharp 中级篇 2-1 装箱与拆箱
.NET Core CSharp 中级篇 2-1 本节内容为装箱与拆箱 简介 装箱和拆箱是一个相对抽象的概念.你可以想象一下一堆满载货物的大卡车,他是由许多工人将货物集中堆放装入的,对于我们而言在没有 ...
随机推荐
- ubuntu 安装谷歌浏览器
如何在ubuntu 中安装谷歌浏览器, 对于一个刚刚接触ubuntu的人来说,希望安装软件更加的简单,明了.最好能够像在windows下面安装软件一样. 先来介绍一下如何快速的安装谷歌浏览器,以下的方 ...
- MongoDB自学------(4)MongoDB主从搭建
MongoDB复制原理 mongodb的复制至少需要两个节点.其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据. mongodb各个节点常见的搭配方式为:一主一从.一主多 ...
- 浅谈Kotlin中的函数
本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/UV23Uw_969oVhiOdo4ZKAw作者:连凌能 Kotlin,已经被Android官方 ...
- PostgreSQL数据库一些tricks
PostgreSQL自带Pgadmin客户端,可用于访问本地和远程PG库,一些tricks如下: 1.联合查询 SELECT * FROM table1 INNER JOIN table2 ON ta ...
- router-view 与 动态组件 区别
提问:router-view 可以页面跳转,使用 is特性 也可以进行页面跳转,有什么区别? 参考链接 https://segmentfault.com/q/1010000010750059
- Flask 教程 第九章:分页
本文翻译自The Flask Mega-Tutorial Part IX: Pagination 这是Flask Mega-Tutorial系列的第九部分,我将告诉你如何对数据列表进行分页. 在第八章 ...
- 由浅入深了解RabbitMQ
简介 RabbitMQ是流行的开源消息队列系统.RabbitMQ是AMQP(高级消息队列协议)的标准实现.支持多种客户端,如:Python.Ruby..NET.Java.JMS.C.PHP.Actio ...
- Python只读取文本中文字符
#coding=utf-8 import re with open('aaa.txt','r',encoding="utf-8") as f: #data = f.read().d ...
- Dynamics CRM - js中用webapi基于fetchxml查询遇到的问题 -- Invalid URI: The Uri scheme is too long.
最近用WebApi做基于Fetchxml的查询的时候,遇到一个很蛋疼的报错:Invalid URI: The Uri scheme is too long. 检查了整个URL,也没发现有什么问题. - ...
- HTML5播放视频,并使用ffmpeg对视频转编码
网页加入视频可以用h5自带的video标签,这里用一个jQuery封装优化好的video视频组件videojs. videojs官方网站:https://docs.videojs.com/index. ...