C# 循环break 和continue
循环
day05 2018.01.08 周一
-------------------------------------------------------
关键字
双重for
上午
数组
一维数组
二维数组
方法
OOP 4-5
string
内存
集合IO
--------------------------------------------------------
中止循环
1. break
1) swich..case
2) break : 中止循环
3)break 是如何中止的?
循环执行过程中,遇到 break 语句时,中止循环
循环下面的其它语句。
4) break 会和 if 语句配合使用;
5) while ,do while ,for中都可以
练习1:
int x = 2;
do
{
x++;//x=x+1; //3 4
//如果x是偶数,中止循环
if( x % 2 == 0 )
{
//遇到break会执行循环结束大括号下面的语句
break ;
}
Console.WriteLine( x );//3
}while ( x > 2 && x <= 4 );
Console.WriteLine( x );
答案:
3
4
代码详见:DAY05_02_Break_Continue ---BreakDemo1.cs
2)观察下列代码的功能是什么?
int sum = 0 ; //求和
for ( int i = 0 ; i <= 100 ; i++ )
{
if( sum > 2000 )
{
Console.WriteLine( i );
break ;
}
分析得出,i=63时,sum+63=2016,然后往下遇到 for的结束
会返回到i++,i变成了64,然后判断满足<=100,执行循环体
当再次判断sum与2000关系时,2016>2000,所以执行if代码
打印i的值为64,遇到 break 跳出循环。
sum += i ; //累加
}
Console.WriteLine( "for循环执行结束" );
功能: 求0到100以内所有数字的和,当和大于2000
时,提前结束循环了(提前中止循环)
代码详见:DAY05_02_Break_Continue --- LianXi2.cs
2) continue 中止循环
coninue用于结束本次循环,继续执行下一次循环。
含义是:
遇到 continue 时,continue下面的语句不再执行,
会执行下一次循环。
总结:关于 break 和 continue
1) 相同点: 用于中止循环
2)不同点:
循环中一遇到 break,整个循环都中止了
循环中遇到 continue,只是表示一轮的结束,
它还会继续下一次循环,只是continue下面的其它
语句不再执行。
3)使用场景:
1) break 一般是和总和或总乘积变量做比较
if ( sum > 2000 )
break ;
2) contiue 更多的是对一组数据进行判断时
这组数组中某一个或几个不满足条件时,做
其它处理。然后继续遍历剩下的其它数据。
比如:打印50以内所有的偶数.循环体中可
使用if语句进行判断,如果是奇数,直接cotinue
进行下一个数字比较。
练习: 打印50以内所有的偶数.
要求:使用 continue 关键字实现。
代码详见:DAY05_02_Break_Continue --- LianXi1.cs
练习:
打印10以内的所有数字,但是3 和 8 两个数字不会打印。
要求:使用 continue 关键字实现。
使用for循环完成 或 使用 while 循环完成。
-------------------------------------------------------
循环嵌套
1. 循环嵌套含义?
在一个 循环中包含另外一个循环。
外层循环,内层循环
//外层循环,由i构成
for (int i = 0 ; )
{
//内层循环,由j 构成
for( int j = 0 ; )
{
}
}
2. 循环嵌套的层数?
任意层,常用的嵌套层,2层
3. 哪种循环嵌套哪种?
三种可以任意嵌套
4. 双重 for 循环
1.数组排序
2.打印规律性图形
for ( int i = 0 ; i< ??? ; i++ )
{
for( int j = 0 ; j < ??? ; j++ )
{
Console.Write("*");
}
Console.WriteLine();
}
练习:九九乘法表
*******
*******
*******
*******
*
**
***
****
*****
******
*******
*********
********
*******
******
*****
****
***
**
*
*
***
*****
***
*
for ( )
{
for ()
{
}
}
中午作业1:断点测试 LianXi2.cs中Test2()和Test3()
方法的执行,分析while循环中continue跳到哪里?
中午作业2:打印以下图形
1)**********
for( int i = 0 ; i < 10 ; i++ )
{
Console.Write("*");//在一行上打印
}
Console.WriteLine(); //换行
2)
*******
*******
*******
*******
*******
写法:
外层for循环,控制行数(一共的行数)
for ( int i = 0 ; i < 5; i++ )
{
//内层for循环,控制列数(每一行打印的*数量)
for ( int j = 0 ; j < 7 ; j++ )
{
Console.Write("*");
}
Console.WriteLine();//换行
}
---------------------------------------------------------
说明:总结的打印多种图形的类在:PrintShape.cs 类中
--------------------------------------------------------
补充:
在嵌套的循环中,也只可以使用 break 和 continue ,
还是跳出循环,但跳出的是所在的循环,并不能直接
跳出最外层的循环.
例如:
int sum = 0 ;
for ( int i = 1 ; i <= 5 ; i++ )
{
for( int j = 1 ; j < 10 ; j++ )
{
if( j % 2 == 0 )
{
break ;
}
Console.Write( j + "\t");
}
Console.WriteLine();
sum += i ;
}
Console.WriteLine( sum );
说明:总结的打印多种图形的类在:PrintShape.cs 类中
补充2:
死循环
下午
循环的使用场景:
1. 如果遇到至少需要执行一次的需求或功能,选择do while
2. 如果需要或完成的功能,可以翻译为"当满足...条件,做
...事情时",要使用while循环完成;
也可以理解为,不能明确知道循环次数时,只能使用while
3. 使用for循环完成的功能,大部分都使用while替代,
但是while完成的功能,for并不一定能完成。
for对一组规律数据操作:求和,求阶乘,求指定范围
内的数据
如:求1+2+3+4+...100的和
如:求100以内所有偶数
如:求1000以内所有水仙花数(三位 各位的三次方相加等于数本身)
1000以内所有的水仙花数:153 370 371 407
四叶玫瑰
五角星数
...
如:求100以内所有质数(素数)
............
--------------------------------------------------------
数组
1. 数组概念
数组是内存中一块区域,
这块区域可以存储多个同一类型的数据
这些数据都拥有同样的名字
通过每个数据的下标标识来区分(0,1,2,3,4,....)
这块区域是连续。
2. 数组的定义
基本语法:[]
数据类型[] 数组名;
如:数据类型可以是13种值类型,自定义定义的类型
如:定义一个int类型的数组,年龄数据ages
int[] ages ;
如:float类型,存储多个小球移动速度 moveSpeeds
float[] moveSpeeds ;
3. 数组的初始化(赋值)
int[] ages ; //定义
ages = { 21,23,25,20 };
静态:int[] ages = { 21, 23 , 25 , 20 };
1) { }
2) 只能一条语句
3)何时使用静态初始化?
明确已知数组中存储元素的个数,且明确
已知每个元素的值
动态:new
基本语法 :
数据类型[] 数组名 ;
数组名 = new 数组类型[60];
或:数据类型[] 数组名 = new 数组类型[60]
如: 使用 动态初始化来构建一个数组,nums
存储100个float类型的数据;
float[] nums ;
nums = new float[20];
或: float[] nums = new float[20];
说明:
1) new 用于动态初始化
2) 何时使用动态初始化?
已知存储了多个数组,但是不明确知道每个数据
的值是多少?
3) 数组动态初始化,每个元素都是有默认值的:
整数,0
小数,0.0
布尔, false
.....
4. 数组元素,数组长度,数组中的元素的值默认
基本语法:
数组名[下标标识]
注:下标标识是一个整数,从0开始,1,2,3,4,5,
如:int[] ages = { 21, 23, 25 };
第一个元素: ages[0]
第二个元素: ages[1]
Console.WritLine( ages[1]);
练习
1) 定义一个表示角色年龄的数组,类型int,roleAges ,
存储的角色的年龄值:45,67,91,89 ,10
使用静态初始化方式来完成。
2) 定义一个表示角色身高的数组,数组的类型 float
数组的名字 roleHeights ,存储 5个角色的身高,
要求:使用动态初始化完成。
3) roleHeights 中的每个元素及元素的值
-------------------------------------------------------
练习2:理解数组元素,数组元素的值,下标
int[] numbers = new int[3] ;
1) 数组名为: numbers
2)数组长度为:3
3)数组的类型为:int
4)数组中有几个元素:3个
5)数组中的第二个元素如何表示:numbers[1]
6)numbers[1] 这个元素来说,这个元素的下标是多少?1
解释:[]中写的具体数字就是下标值,下标值从0开始
第一个元素的下标为0,最后一个元素的下标为:
数组长度-1,如果长度为3,减-1,为 2
7)如果要打印数组中最后一个元素的值和第一个元素中存储
的具体数字,如何表示?
Console.WriteLine( numbers[0] );//0
Console.WriteLine( numbers[2] ) ;//0
5. 数组的遍历(挨个查看每个具体值)
有至少3种方法:
方法1:直接利用数组元素的下标
ages[0]
ages[1]
.....
如果想查看结果,可以将其放到打印语句中
但是这种方法重载代码太多,太繁琐
方法2:使用标准的for循环
for ( int i = 0 ;i < 数组名.Length ; i++)
{
Console.WriteLine( ages[i] )
}
方法3:当然,也可以使用while,do while,只是相比
不如for循环结构简单,请尝试使用while或
do while 来完成。
方法4:foreach 循环
foreach(数组类型 变量名 in 数组名)
{
Console.WriteLine( 变量名 );
}
6. 数组(复制,插入,删除,.....)
day05作业
1.猜数字游戏
首先会由程序自动生成指定区间范围内任意一个随机数,
[0, 10) 之间的某个数字,然后由控制台提示用户通过
控制台输入0-10范围内用户自己猜测的数字:
“请输入您猜测的数字(范围在0-10之间):”,
然后由程序自动根据用户猜测的数字判断猜测结果:
如果输入的数字大于系统数字,控制台则提示:“您猜测的数字偏小了...”;
如果输入的数字小于系统数字,控制台则提示:“您猜测的数字偏大了”;
否则,输入的数字和系统输入应该正好相等,控制台提示“太棒了,恭喜您猜对了...”
需要注意的是,如果第一次没有猜对了,就应该在输出猜测结果后,
让用户继续进行下一次输入数字猜测数字的操作,
并且对猜测结果进行继续判断;
如果第二次还是没有猜,就应该继续让用户输入数据,
然后再由系统判断,如此一来,会发现程序现在有许多需要反复执行的代码
自然,就需要使用循环语句来完成。
同样,用户在猜测过程中,如果想中止循环,也可以.当用户输入-1时,表示终止循环.
另外,打印最后结果时,还要打印出猜测的次数.
2.(必做题)
键盘输入5个学生的年龄,然后求年龄总和,
平均年龄。
要求,动态初始化数组表示学生年龄的数组。
3.网站验证码 (选做题)
现有一组字符,要求从这组字符中随机取出4位作为网站 验证码。
注:这一组字符串是由 26个大写字母,26个小写字母10个数字构成的char类型的数组,数组名为codes。
要求:从codes数组中随机取出4位.作为网站验证码,要求 这4位验证码放在数组中
考查: char 类型数组的定义及初始化、随机数的操作.
提示:声明并初始化数组
产生一个随机数,随机数范围,int index = new Random().Next (codes.Length)
for循环遍历数组,取出index位置上的那个字符