循环、异常捕获
1、异常捕获
我们在程序中经常会出现各种各样的异常,你如果想要你的程序变得坚强一些。
在你的代码中应该经常性的使用try-catch来进行异常捕获。
哪行代码有可能出现异常,你try住它。
语法:
try
{
可能会出现异常的代码;
....
}
catch
{
出现异常后要执行的代码;
}
执行过程:如果try中的代码没有出现异常,那么catch中的代码不会执行。
如果try中的代码出现了异常,那怕这行出现异常的代码后面还有一百行都不会执行了,
而是直接跳到catch中执行代码。
//语法上没有错误,在程序运行的过程当中,由于某些原因程序出现了错误,不能再正常的运行。 bool b = true; int number=0;//声明了一个变量 Console.WriteLine("请输入一个数字"); try { //abc number = Convert.ToInt32(Console.ReadLine());//赋值 } catch { Console.WriteLine("输入的内容不能够转换成数字"); b = false; } //我们如果要执行下面这行代码,需要满足某些条件。 //让代码满足某些条件去执行的话,使用bool类型 if (b) { Console.WriteLine(number * 2);//使用 } Console.ReadKey();
2、变量的作用域
变量的作用域就是你能够使用到这个变量的范围。
变量的作用域一般从声明它的那个括号开始到那个括号所对应的结束的括号结束。
在这个范围内,我们可以访问并使用变量。超出这个范围就访问不到了
3、switch-case
用来处理多条件的定值的判断。
语法:
switch(变量或者表达式的值)
{
case 值1:要执行的代码;
break;
case 值2:要执行的代码;
break;
case 值3:要执行的代码;
break;
..........
default:要执行的代码;
break;
}
执行过程:程序执行到switch处,首先将括号中变量或者表达式的值计算出来,
然后拿着这个值依次跟每个case后面所带的值进行匹配,一旦匹配成功,则执行
该case所带的代码,执行完成后,遇到break。跳出switch-case结构。
如果,跟每个case所带的值都不匹配。就看当前这个switch-case结构中是否存在
default,如果有default,则执行default中的语句,如果没有default,则该switch-case结构
什么都不做。
//练习:数字校验 bool b = true; int num = 0; Console.WriteLine("请输入一个数字"); try { num = Convert.ToInt32(Console.ReadLine());//读入用户输入并赋值 } catch { Console.WriteLine("只能输入数字!"); b = false; } if (b)//如果b为true则执行,false不执行 { Console.WriteLine(num*2); } Console.ReadKey();
//try-catch和switch-case组合
//年份练习:请用户输入年份、月份,输出该月的天数 Console.WriteLine("请输入一个年份"); try { int year = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("请输入一个月份"); try { int month = Convert.ToInt32(Console.ReadLine());//1-12 if (month>=1&&month<=12) { int day = 0;//声明一个变量来存储天数,并初始化。 switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: day = 31; break; case 2: if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) { day = 29; } else { day = 28; } break; default: day = 30; break; } Console.WriteLine("{0}年{1}月{2}日", year, month, day); }//if月份判断 else { Console.WriteLine("输入的月份不在1-12间,程序退出。"); } }//月份的try括号 catch { Console.WriteLine("输入的月份有误,程序退出。"); } }//年份的try括号 catch { Console.WriteLine("输入的年份有误,程序退出。"); } Console.ReadKey();
4、循环结构
while循环:
while(循环条件)
{
循环体;
}
执行过程:程序运行到while处,首先判断while所带的小括号内的循环条件是否成立,
如果成立的话,也就是返回一个true,则执行循环体,执行完一遍循环体后,再次回到
循环条件进行判断,如果依然成立,则继续执行循环体,如果不成立,则跳出while循环。
在while循环当中,一般总会有那么一行代码,能够改变循环条件,使之终有一天不再成立,
如果没有那么一行代码能够改变循环条件,也就是循环条件永远都成立,我们称之这种循环
叫做死循环。
最简单的最常用的死循环:
while(true)
{
}
//求1-100之间所有偶数的和 //循环体:累加的过程 //循环条件:i<=100 //int i = 1; //int sum = 0;//声明一个变量用来存储总和 //while (i <= 100) //{ // if (i % 2 != 0) // { // sum += i; // } // i++; //} //Console.WriteLine(sum); //Console.ReadKey();
特点:先判断,再执行,有可能一遍循环都不执行。
5、break
1)、可以跳出switch-case结构。
2)、可以跳出当前循环。
break一般不单独的使用,而是跟着if判断一起使用,表示,当满足某些条件的时候,就不再循环了。
//int i = 1; //int j=1; //while (i <= 10) //{ // while (j <= 10) // { // Console.WriteLine("我是里面的while循环"); // j++; // break;//注释break看看 // } // Console.WriteLine("我是外面的while循环"); // i++; // //break;//解开break看看 //} //Console.ReadKey();
continue仅跳出本次循环,并不结束整个循环。
//练习1:用 while continue实现计算1到100(含)之间的除了能被7整除之外所有整数的和。 int sum = 0; int i = 1; while (i <= 100) { //if (i % 7 == 0) //{ // i++; // continue;//当执行到continue,不在执行本次循环下面的语句,直接进入下次循环 //} sum += i; i++; } Console.WriteLine(sum); Console.ReadKey();
6、do-while循环。
语法:
do
{
循环体;
}while(循环条件);
执行过程:程序首先会执行do中的循环体,执行完成后,去判断do-while循环的循环条件,
如果成立,则继续执行do中的循环体,如果不成立,则跳出do-while循环。
特点:先循环,再判断,最少执行一遍循环体。
int i = 1; int sum = 0; do{ if (i % 2 != 0) { sum += i; } i++; }while (i<0) ; //即便i=1<0,第一次还是直接执行。 Console.WriteLine(sum); Console.ReadKey();
2、for循环
语法:
for(表达式1;表达式2;表达式3)
{
循环体;
}
表达式1一般为声明循环变量,记录循环的次数(int i=0;)
表达式2一般为循环条件(i<10)
表达式3一般为改变循环条件的代码,使循环条件终有一天不再成立(i++)。
执行过程:程序首先执行表达式1,声明了一个循环变量用来记录循环的次数,
然后执行表达式2,判断循环条件是否成立,如果表达式2返回的结果为true,
则执行循环体。当执行完循环体后,执行表达式3,然后执行表达式2继续判断循环条件是否成立,
如果成立则继续执行循环体,如果不成立,则跳出for循环。
//简单例子
for (int i = 0; i < 100; i++)
{
Console.WriteLine(i);
} Console.ReadKey();
/求1-100之间的所有奇数和 //int sum = 0; //int n = 100; //for (int i = 1; i <= n; i += 2) //{ // sum += i; //} //Console.WriteLine(sum); //Console.ReadKey(); //找出100-999间的水仙花数 //水仙花数指的就是 这个百位数字的 //百位的立方+十位的立方+个位的立方==当前这个百位数字 //153 //百位:153/100 //十位:153%100/10 //个位:153%10 for (int i = 100; i <= 999; i++) { int bai = i / 100; int shi = i % 100 / 10; int ge = i % 10; if (bai * bai * bai + shi * shi * shi + ge * ge * ge == i) { Console.WriteLine("水仙花数有{0}",i); } } Console.ReadKey();