http://www.189works.com/article-44312-1.html
今天继续和大家探讨C#,今天我们来聊一聊C#中的循环结构。对于循环结构我想在所有语言中都会看到的!因为循环结构是一个又省时又省力的一个好方法!所以大家用的也比较普遍,接下来我们就一起进入循环结构。 在我们登陆QQ时,如果你的密码输入不正确就会一直提示你账号或者密码不正确,这个功能就是使用了循环结构,好的!我们还是来看个控制台程序的例子,我觉得例子是最容易说明问题的方法。 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 Console.Write("登陆账号"); 6 string name = Console.ReadLine();//接收登陆账号 7 Console.Write("登陆密码"); 8 string password = Console.ReadLine();//接收登陆密码 9 //while循环判断登陆账号和密码是否都正确,有一个不正确就继续输入 10 while (name != "admin" || password != "123") 11 { 12 //如果登陆不正确就给出提示 13 Console.WriteLine("登陆账号或者密码不正确,请重新输入"); 14 Console.Write("登陆账号"); 15 name = Console.ReadLine();//再次接收账号 16 Console.Write("登陆密码"); 17 password = Console.ReadLine();//再次接收密码 18 } 19 Console.WriteLine("登陆成功...");//登陆成功,循环结束 20 Console.ReadKey(); 21 } 22 } 运行结果: while循环结构语法: while(条件表达式)
{
代码块;
}
流程图: 流程图说明: while循环执行时,先判断条件表达式,如果条件表达式结果为真(true),执行while循环里的代码(就是登陆的账号和密码),如果条件表达式的结果为假(false),while循环结束(登陆成功)。这里在执行while循环之前,大家一定要给条件表达式里的变量赋值,就是先输入一次账号和密码,再做判断。 下一个do…while循环,对于do…while循环和while差不多,do…while是先执行,后判断,而while是先判断,后执行。do…while说白了就是先斩后奏的意思!呵呵!下面看个控制台程序的例子就会明白了: 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 6 string answer;//先定义一个变量,用来保存 7 do 8 { 9 //输出提示并询问 10 Console.WriteLine("青苹果住在博客园"); 11 Console.WriteLine("你是否知道青苹果(Y/N)"); 12 answer = Console.ReadLine();//接收答案 13 } while (answer != "Y" && answer != "y"); 14 Console.WriteLine("我知道青苹果"); 15 Console.ReadKey(); 16 } 17 } 运行结果: 我简单的解释一下这个例子,这个例子就相当于你问路,当你问第一个人说不知道后,你就会去问下一个人,直到你问到有人知道路线的为止(也就是回答Y的人)。 我们来看一下do...while循环的语法吧: do { 代码块; }while(条件表达式); 流程图: 流程图说明: 从程序开始,首先执行一次循环里的代码块,然后执行while里的条件表达式进行判断,如果结果为真(true),继续执行代码块,也就是开始循环,如果为假(false),循环结束。 While和do…while都是不确定循环的次数,while是判断了之后再去执行,而do…while是先执行再去判断,至少执行一次。下面我们来看一个已经确定循环次数的,for循环, for循环是用在已经知道循环的次数来进行循环的,还是看个控制台程序: 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 6 //我们就拿西游记九九八十一难比喻吧(本人非常鄙视那些翻拍的东西,比如说:新西游记) 7 //循环输出第几难,如果到81难了就结束循环,num代表第几难。 8 for (int num = 1; num <= 81; num++) 9 { 10 Console.WriteLine("第几难{0}难", num);//输出第几难 11 } 12 Console.WriteLine("九九八十一难结束"); 13 Console.ReadKey(); 14 } 15 } 运行结果: 这个例子是已经确定了循环次数,在一般我们知道循环次数的情况下一般用for循环。 来看一下for循环的语法吧! for(表达式1;表达式2;表达式3)
{
代码块;
}
这个语法中的表达式我简单的说一下吧,可能刚一看有点晕,这里面的表达式1是赋值语句,是给循环中的变量赋值的,比如:int num=1;表达式2是条件表达式,可以说是用来判断的,如果这个判断结果为假(false),那么循环就结束了,如果为真(true),循环就继续,比如:在上面的控制台程序中的num<=81;表达式3也是赋值语句,就是用来进行循环中变量的运算,比如:num++;这三个表达式合起来的写法就是for(int num=1;num<=81;num++) 流程图: 流程图说明: for在循环时,首先执行表达式1,然后执行表达式2判断条件是否正确,如果为真(true),那么就执行循环里的代码块,再执行表达式3;如果结果为假(false),循环就结束。在这里说一下啊,就是在判断为真(true)的情况下,执行完表达式3后执行表达式2再次进行判断,然后重复以上操作,直到条件表达式判断为false结束为止。 下面我们来看两个特殊的东东。。。break和continue 这两个是在程序中起到中止和继续的操作,这两个比较好理解!我就不说太多了,写两个控制台程序一看就明白了, break控制台程序: 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 int count = 0;//先定义变量来保存的登陆次数,初始化为0 6 Console.Write("登录账号"); 7 string name = Console.ReadLine(); 8 Console.Write("登录密码"); 9 string password = Console.ReadLine(); 10 //下面用while循环来看一下break的作用,我们的目的是当循环输入三次密码之后给出用户提示 11 while (name != "admin" || password != "123") 12 { 13 count++;//每循环一次就让它加一 14 if (count == 3)//如果登陆的次数是3的时候,就中止它 15 { 16 break;// (^o^)注意啦!break在这里呢 ! 17 } 18 //如果输入不正确,让用户重新输入 19 Console.WriteLine("密码或者账号不正确,请重新输入!"); 20 Console.Write("登录账号"); 21 name = Console.ReadLine(); 22 Console.Write("登录密码"); 23 password = Console.ReadLine(); 24 } 25 if (count == 3)//上面中止循环之后给出提示 26 { 27 Console.WriteLine("对不起!您已经连续输入错误3次!"); 28 } 29 else 30 { 31 Console.WriteLine("青苹果登陆博客园成功");//登录成功给出提示,循环结束 32 } 33 Console.ReadKey(); 34 } 35 } 运行结果: 下面一个,continue控制台程序: 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 //continue这个我们来用for循环实现,循环7次,代表一个星期, 6 for (int i = 1; i <= 7; i++) 7 { 8 if (i == 3)//判断为星期六的时候休息 9 { 10 Console.WriteLine("星期3---请假"); 11 continue;// (^0^)注意啦!continue在这里呢! 12 } 13 //输出判断 14 if ( i == 7) 15 { 16 Console.WriteLine("周日休息"); 17 } 18 else 19 { 20 Console.WriteLine("星期{0}---上班。。。", i);//循环输出星期 21 } 22 } 23 Console.ReadKey(); 24 } 25 } 运行结果: 看明白了吧!好的,我们再来简单的理解一下break和continue。break是中止循环,它会直接影响到循环次数,就是说只要break了这个循环就直接结束,不带犹豫的。而continue是停止本次循环,继续执行下面的循环,不影响循环的次数,就比如说你每天吃三顿饭吧(正常人的饮食习惯),如果你中午那顿饭continue了,没有吃!那么你晚上可以再吃,但是如果break了!就以后不能再吃饭了!只有等着饿死了。。。 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 Console.WriteLine("请输入数字"); 6 string str = Console.ReadLine(); 7 //foreach循环每次从字符串str里面得到一个单字符 8 foreach (char ch in str) 9 { 10 //判断这个单字符是否为数字 11 if (Char.IsDigit(ch) == false)//“Char.IsDigit”这个是判断数字的,如果为数字的话返回true,否则返回false,在这里只要知道就可以了! 12 { 13 Console.WriteLine("{0}不是数字", ch);//输出结果 14 break;//break结束循环 15 } 16 } 17 Console.WriteLine("判断完毕"); 18 Console.ReadKey(); 19 } 20 } 运行结果: foreach语法: foreach(数据类型 变量 in 集合或数组) { 代码块; } 这里foreach循环的语法可能不太好理解,下面我就详细的说说,foreach循环的每一次循环都要从集合或者数组中(in)按从左向右的顺序拿到一个值,这个值得数据类型和集合或者数组的数据类型要一致,一般情况下这个值保持在一个变量里。foreach循环和for循环有些相似,但是foreach循环是不固定循环的次数,而且在上面那个foreach控制台的例子中我们看到它的循环次数是自动控制的。 流程图: 流程图说明: foreach在循环时,首先赋值,然后在表达式1中进行判断,如果为真(true)就执行代码块,再执行表达式2,然后进行循环判断,当表达式1判断结果为假(false)时循环结束。 ok!以上就是本次的所有循环,在循环中我们要注意一个问题,就是死循环,死循环在程序开发中应该尽量避免,当我们一旦发现了死循环,就要仔细检查循环里控制循环退出的代码是否有错误。我们还是来看个典型的事例吧: 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 int i = 1; 6 while (i < 10) 7 { 8 Console.WriteLine("这是第{0}次循环", i); 9 //这里是缺少的代码处 10 } 11 Console.ReadKey(); 12 } 13 } 运行结果: 错误点修改: 正确的运行结果: 总结: 1.while循环结构; 2.do...while循环结构; 3.for循环结构; 4.关键字break和continue; 5.foreach循环结构; 6.死循环; Ok!本次分享就到这里,欢迎大家多多留言讨论,这样我们才可以共同进步 |