上节课的最后我们介绍了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,其实也不能说是循环跳出,说循环终止更准确些吧。
今天学习就到这里,欢迎大家对内容进行批评指正,万分感谢!
接下来用博客记录十三道练习题吧!