




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Top1. 循环结构(while、dowhile、for)1. 循环结构(while、dowhile、for)1.1. 什么是循环结构在日常生活中,会有很多需要反复执行的事情,比如:每一年的4个季节,每一周的7天,每日的3餐,打印机每份文档打印50份,一圈跑道400米跑3圈,都是在反复执行的。再看软件系统中的需求:问题1:输出100行语句,每行语句都一样,即: 行动是成功的阶梯,行动越多,登得越高! 行动是成功的阶梯,行动越多,登得越高! 行动是成功的阶梯,行动越多,登得越高!问题2:输出100行语句,每行语句都类似,即: 第1,行动是成功的阶梯,行动越多,登得越高! 第2,行动是成功的阶梯,行动越多,登得越高! 第3,行动是成功的阶梯,行动越多,登得越高! 第100,行动是成功的阶梯,行动越多,登得越高!问题3:计算1到50乘以8.88的结果 1 8.88 8.88 2 8.88 17.76 3 8.88 26.64 4 8.88 35.52 50 8.88 444诸如此类问题都是在反复执行的,在软件系统中可以通过循环这种语法结构来解决。循环是程序设计语言中反复执行某些代码的一种计算机处理过程, 是一组相同或相似语句被有规律的重复性执行。对于循环来说,需要考虑两个要素,其一要素为循环体, 也就是被反复执行的相同或相似的语句,其二要素为循环的条件,也就是循环得以继续执行下去的条件,常常以循环次数的方式体现。常用的循环结构有:while、do-while、for。1.2. while语句1.2.1. while语句的执行逻辑while语句是循环的一种常见语法结构,语法如下:1. while( boolean表达式 ) 语句块;2. while语句的执行过程为,首先计算boolean表达式的值,而后进行判断,若值为true则执行语句块,语句块执行完后再次判断boolean表达式的值,如果为true则继续执行语句块,如此循环往复,直到boolean表达式的值为false时退出while循环而执行while之后的语句。1.2.2. while语句的流程图while语句的流程图如图 - 11所示,需要注意的是,一般情况下,循环操作中会存在使得循环条件不满足的可能性,否则该循环将成为“死循环”。“死循环”意味着会一直执行循环体操作,循环后面的语句永远不会被执行,“死循环”在软件系统中是需要避免的。图 - 111.2.3. while语句用于处理循环逻辑while语句在实际应用中应用比较广泛,通过如下示例体会while语句的执行逻辑:1. int age = 1;2. while (age=100) 3. System.out.println(“马上有钱”);4. age+;5. 上面的语句执行过程如下,首先声明整型变量age并赋初始值为1,而后判断age是否小于等于100,条件为真,输出“马上有钱”并将age的值增1变为2,再次判断条件,此时age为2,依然小于100,再一次输出“马上有钱”并将age的值再增1变为3,以此类推,直到age等于101时,判断条件为false,循环结束。1.2.4. 使用break语句跳出循环break用在循环体中用于退出循环结构。看如下示例代码:1. int x = 0; 2. while ( x 10 ) 3. if ( 5 = x )4. 5. break;6. 7. System.out.println(x);8. x + + ;9. 分析上面的代码得出结论,输出结果为0 1 2 3 4,因为当x等于5时执行break语句直接退出循环结构了,即if语句块后面的输出x的值以及x+不再被执行。1.3. do-while语句1.3.1. do-while语句的执行逻辑do-while语句也是循环的一种常见语法结构,语法如下:1. do 2. 语句块3. while( boolean表达式 ) ;do-while语句的执行过程为,先执行语句块,再判断boolean表达式,如果为true则再次执行语句块,如此循环往复,直到boolean表达式的值为false时止。也就是说,do-while语句,无论boolean表达式是否为true,都先执行一次语句块。1.3.2. do-while语句的流程图do-while语句的流程图如图 - 12所示,与while语句一样,do-while语句也要避免“死循环”的发生。图- 121.3.3. do-while语句用于处理循环逻辑do-while语句在实际应用中应用比较广泛, 通过如下示例体会do-while语句的执行逻辑:1. int pwd ;2. do3. System.out.print(“请输入密码”);4. pwd = scanner.nextInt();5. while ( 123 != pwd) ;上面的语句执行过程如下,首先声明整型变量pwd,在do语句中提示“请输入密码”,接收用户输入的数据赋给pwd, 而后判断123是否不等于pwd,若为true则执行do语句块,以此类推,直到123等于pwd时,循环结束。1.3.4. while和do-while语句的区别while与do-while都是用于执行循环结构的语句,区别在于,while循环先判断再执行,而do-while循环先执行一次,再判断。那么,当初始情况不满足循环条件时,while循环就一次都不会执行,而do-while循环不管任何情况都至少会执行一次。注意:while和do-while语句的不同仅仅体现在第一次就不满足条件的循环中;如果不是这样的情况,while与do-while可以互换。请看如下两段示例程序:1. 示例1:while循环方式2. int pwd = 0;3. while ( 123 != pwd)4. System.out.print(“密码:”);5. pwd = scanner.nextInt();6. 7. 示例2: do-while循环方式8. intpwd ;9. do10. System.out.print(“密码”);11. pwd = scanner.nextInt();12. while ( 123 != pwd) ;分析示例1与示例2得出结论,运行结果完全一样。这是因为两段代码第一次的while条件都满足,此时while与do-whlie可以互换,所以结果完全一样。1.4. for语句1.4.1. 考虑如下循环问题的相同之处请考虑如下三个题目的相似之处:1. 计算从1加到100的值;2. 计算1+1/3+1/5+1/999;3. 找出从第1号学员到第500号学员中成绩大于90的学员。通过上面的问题可以看出,如上三个题目都是在有规律的重复执行某个操作,在程序中考虑使用循环结构来解决。首先需要先找到前面介绍的循环变量,此循环变量在每一次的循环中有规律的发生变化,并且常常作为判断是否继续循环的条件。首先,看第1个题目,设计循环变量i ,i的值为1,2,100,即:从1开始,每次增1。第二个题目,设计循环变量i , i的值为1,3,5,999,即:从1开始,每次增2。第三个题目,设计循环变量i , i的值为1,2,500,即:从1开始,每次增1。通过上面的分析,可以看出,如上的循环都是固定次数的循环,这种情况,优先考虑使用for语句来实现。1.4.2. for语句的执行逻辑for语句是循环中最最常用的一种方式。for循环用于将某个语句或语句块重复执行预定次数的情形。语法如下:1. for ( 表达式1;表达式2;表达式3 ) 2. 语句块(循环体)3. 可以看出,for循环的三个表达式之间通过分号;进行分隔,其执行逻辑如下所示:1. 计算表达式1的值,通常为循环变量赋初值;2. 计算表达式2(表达式2为逻辑表达式)的值,即判断循环条件是否为真,若值为真则执行循环体一次(语句块),否则跳出循环;3. 执行循环体;4. 计算表达式3的值,此处通常写更新循环变量的赋值表达式;5. 计算表达式2的值,若值为true则执行循环体,否则跳出循环;6. 如此循环往复,直到表达式2的值为false。1.4.3. for语句的流程图for语句流程图如图-1所示:图- 1简单示例如下:1. for ( int i = 1 ; i = 10 ; i + + ) 2. System.out.println( i );3. 如上程序的输出结果为:1 2 3 4 5 6 7 8 9 10分析如上程序的执行过程:首先,初始化i的值为1,判断i是否小于等于10,结果为true,其次,输出i的值1,然后,执行i的自增1,再判断i是否小于等于10,结果为true,执行输出i的值2,以此类推输出i的值10后,执行i的自增1,此为i为11,判断结果为false,程序终止。1.4.4. for语句用于实现固定次数循环for语句常常用于解决固定次数循环的处理,比如说累加和,想求1+2+3+100的结果,次数固定执行100次,可以考虑使用for循环处理,参见如下代码:1. int sum = 0 ;2. for ( int i = 1 ; i = 100 ; i + + ) 3. sum += i ;4. 5. System.out.println(“1到100的和为:” + sum ) ; 分析上面代码的执行过程,首先,声明一个变量用于保存累加和,此变量命名为sum,赋初始值为0,而后,for循环从1开始,每次增1,执行100次,循环体中将i的值累加到sum变量中。注意:每次都是在sum的基础之上加上i,所以使用了sum += i。循环结束后,输出结果“1到100的和为:5050“。了解了如上题目之后,问:想求10的阶乘,即1*2*3*10,可不可以使用for循环来解决,如果可以的话要如何解决呢?当然可以,try!1.4.5. for语句三个表达式特殊用法首先回顾for语句的语法:1. for ( 表达式1;表达式2;表达式3 ) 2. 语句块通过上面的代码可以看出,for语句实现循环时需要3个表达式并且使用分号;分隔,在实际使用时,for语句可以有几种特殊的使用方法:特殊方式1:表达式1位置内容为空,看如下代码:1. int sum = 0 ;2. int i = 1;3. for ( ; i = 10 ; i + + ) 4. sum += i ;5. 6. System.out.println(“1到10的和为:” + sum ) ; 通过上面的代码可以看出,虽然省略了表达式1,但只是将它放在了for循环的外面进行声明,只是位置不同而已。在此需要注意一点,即使for语句中不写表达式1了,表达式2前面的分号;也不能省略。特殊方式2:表达式3位置内容为空时,看如下代码:1. int sum = 0 ;2. for ( int i = 1 ; i = 10 ; ) 3. sum += i ;4. i + + ;5. 6. System.out.println(“1到10的和为:” + sum ) ; 通过上面的代码可以看出,虽然省略了表达式3,但也只是将它放在了for循环体之中,只是位置不同而已。在此需要注意一点,即使for语句中不写表达式3了,表达式2后面的分号;也不能省略。特殊方式3:表达式1,2,3位置内容均为空时,看如下代码:1. for ( ; ; ) 2. System.out.println(“我要学习”);3. 通过上面的代码可以看出,如上代码没有循环变量、没有条件控制,因此会造成死循环,而死循环在编写程序过程中是必须要避免的,可以在循环体中添加break跳出循环。特殊方式4:表达式 1 和 3 位置内容的多样化for语句中的三个表达式中表达式1和表达式3可以使用逗号表达式,逗号表达式就是通过”,”运算符隔开的多个表达式组成的表达式,从左向右进行计算。看如下示例:1. for ( int i =1 , j = 6 ; i = 6 ; i +=2 , j -=2 ) 2. System.out.println(“ i , j = “ + i + “,” + j );3. 上面的代码的执行逻辑如下:初始设置i为1,j为6,判断i是否小于等于6,为真执行循环体,而后执行i+=2,j-=2,即:i增2,j减2。再判断i是否小于等于6,为真继续执行循环体,以此类推,直到条件为false。本程序的输出结果为:1. i , j = 1 , 62. i , j = 3 , 43. i , j = 5 , 21.4.6. 循环中使用break语句循环中的break语句应用率很广,break可用于循环语句或switch语句中,其用于循环时,可使程序终止循环而执行循环后面的语句,常常与条件语句一起使用,看如下代码:1. int sum = 0;2. for(int i=1; i=4000) 4. break; 5. 6. sum += i;7. 8. System.out.println(sum);上面的程序需要统计1到100的累加和,条件是当和大于等于4000时则终止计算,此案例通过在if语句中使用break实现了for语句的退出,本程序最终sum的值为:4005。1.4.7. 循环中使用continue语句continue语句只能用于循环中,它的作用为跳过循环体中剩余语句而执行下一次循环,看如下代码:1. int sum = 0;2. for(int i=1; i num) 18. System.out.println(太大了!);19. else 20. System.out.println(太小了!);21. 22. System.out.print(请输入你猜测的数字(1-1000),退出请按0:);23. guest = s.nextInt();24. 25. 26. 步骤四:游戏结束如果用户猜测正确或者录入数字 0 中止游戏,则 while 循环结束。在while 循环结束后,需要判断用户最后一次所录入的数字, 如果猜测正确,则提示用户“恭喜,你猜对了!”;如果录入的为数字0 ,则提示用户“真遗憾,下次再挑战吧!”。最后将 scanner对象关闭,程序结束。代码如下所示:1. import java.util.Scanner;2. public class NumberGuessV01 3. public static void main(String args) 4. /生成一个随机数作为猜测的结果5. int num = (int) (Math.random() * 1000) + 1;6.7. /第一次猜测8. System.out.print(请输入你猜测的数字(1-1000),退出请按0:);9. Scanner s = new Scanner(System.in);10. int guest = s.nextInt();11.12. /如果猜测错误,则继续13. while (guest!=num) 14. /输入为0,则退出循环;否则判断数字15. if(guest = 0)16. break;17. else if (guest num) 18. System.out.println(太大了!);19. else 20. System.out.println(太小了!);21. 22. System.out.print(请输入你猜测的数字(1-1000),退出请按0:);23. guest = s.nextInt();24. 25.26. /提示用户最终结果27. if(guest = num) 28. System.out.println(恭喜,你猜对了!);29. else30. System.out.println(真遗憾,下次再挑战吧!);31. 32. s.close();33. 34. 1.4 完整代码本案例的完整代码如下所示:1. import java.util.Scanner;2. public class NumberGuessV01 3. public static void main(String args) 4. /生成一个随机数作为猜测的结果5. int num = (int) (Math.random() * 1000) + 1;6.7. /第一次猜测8. System.out.print(请输入你猜测的数字(1-1000),退出请按0:);9. Scanner s = new Scanner(System.in);10. int guest = s.nextInt();11.12. /如果猜测错误,则继续13. while (guest!=num) 14. /输入为0,则退出循环;否则判断数字15. if(guest = 0)16. break;17. else if (guest num) 18. System.out.println(太大了!);19. else 20. System.out.println(太小了!);21. 22. System.out.print(请输入你猜测的数字(1-1000),退出请按0:);23. guest = s.nextInt();24. 25.26. /提示用户最终结果27. if(guest = num) 28. System.out.println(恭喜,你猜对了!);29. else30. System.out.println(真遗憾,下次再挑战吧!);31. 32. s.close();33. 34. 隐藏2 猜数字游戏 V2.02.1 问题使用 dowhile 语句实现猜数字游戏,界面的交互过程和上一个案例相同。2.2 方案此案例的实现方案和之前的案例类似。首先,此案例中,需要产生一个 1 到 1000 之间的随机整数,该数值就是用户要猜测的结果;然后,提示用户进行第一次猜测,并得到用户从界面所录入的数字。因为猜测的次数不确定,则使用do-while 循环来构建猜测的过程:判断用户所猜测的数字是否与结果相同,只要猜测不正确,则循环继续。每次循环中,首先判断用户录入的数字是否为 0,如果是,则使用 break 退出循环;否则,根据比较结果输出提示信息(“太大了”或者“太小了”),并提示用户继续下一次猜测。如果用户猜测正确或者录入数字 0,则循环结束。循环结束后,需要判断用户最后一次所录入的数字,如果猜测正确,则提示用户“恭喜,你猜对了!”;如果录入的为数字0 ,则提示用户“真遗憾,下次再挑战吧!”,然后程序结束。程序的流程如图6所示:图62.3 步骤实现此案例需要按照如下步骤进行。步骤一:定义类及 main方法首先定义一个名为 NumberGuessV03 的类,并在类中添加Java应用程序的主方法main,代码如下所示:1. public class NumberGuessV03 2. public static void main(String args) 3. 4. 步骤二:准备录入在main方法中,生成一个随机数作为猜测的结果,然后实例化Scanner类,用于接收用户从控制台输入的数字,还需要声明变量用于存储用户所录入的数字。代码如下所示:1. import java.util.Scanner;2. public class NumberGuessV03 3. public static void main(String args) 4. /生成一个随机数作为猜测的结果5. int num = (int) (Math.random() * 1000) + 1;6.7. /准备输入8. Scanner s = new Scanner(System.in);9. int guest = -1;10. 11. 注意:此步骤中,需要导入java.util包下的Scanner类。步骤三:构建循环使用 do-while 循环,提示用户进行猜测,并调用Scanner类的nextInt 方法接收用户录入的数字,然后判断用户所猜测的数字是否与结果相同:只要猜测不正确,则循环继续。每次循环中,需要使用if-else结构判断用户所录入的数字。首先,判断录入的数字是否为 0,如果为 0 ,表示用户希望退出游戏,则使用 break 退出循环;然后比较猜测的数字和实际数字的大小,并根据比较结果输出提示信息(“太大了”或者“太小了”)。代码如下所示:1. import java.util.Scanner;2. public class NumberGuessV03 3. public static void main(String args) 4. /生成一个随机数作为猜测的结果5. int num = (int) (Math.random() * 1000) + 1;6.7. /准备输入8. Scanner s = new Scanner(System.in);9. int guest = -1;10. do11. System.out.print(请输入你猜测的数字(1-1000),退出请按0:);12. guest = s.nextInt();13. /判断:输入0,则中止14. if(guest = 0)15. break;16. else if(guest num) 17. System.out.println(太大了!);18. else if(guest num) 17. System.out.println(太大了!);18. else if(guest num) 17. System.out.println(太大了!);18. else if(guest num)19. System.out.println(太小了!);20. 21. while(guest!=num);22. 23. /提示用户最终结果24. if(guest = num) 25. System.out.println(恭喜,你猜对了!);26. else27. System.out.println(真遗憾,下次再挑战吧!);28. 29. s.close();30. 31. 隐藏3 随机加法运算器3.1 问题有加法运算器程序,其规则为:程序依次出 10 道加法题目,由用户输入题目的答案。用户每答完一道题,由系统提示结果:答错了或者答对了。10 道题目答完之后,系统计算得分并输出。如果用户希望提前结束,则可以输入1提前退出。本案例要求使用交互的方式实现此游戏,交互过程为:1、程序开始,即出现一道加法题(两个加数均为0到99之间的随机整数),并提示用户输入该题目的答案(输入1则会提前退出程序)。交互过程如图7所示:图72、用户录入后,程序进行判断:如果用户录入的答案错误,则提示“Error!”;如果答案正确,则提示“Correct!”。然后给出下一道题目,并提醒用户继续答题。用户答完10道题目后,系统给出用户的得分并显示(每道题目10分),程序结束。交互过程如图8所示:图83、如果用户录入 1,则表示希望提前退出程序,系统将提示用户的分数,且程序结束。交互过程如图9所示:图93.2 方案此案例中,需要使用 for 循环产生 10 道加法题目。在每次循环中,需要产生两个 0 到 99 之间的随机整数,作为加法题目的两个加数,并计算出正确答案;然后,输出题目,并提示用户进行答题,从而得到用户从界面所录入的数字。得到用户的录入后,进行判断:如果用户录入的为1,则需要提前退出循环;如果用户录入的答案错误,则提示“Error!”,并继续下一次答题;如果用户录入的答案正确,则提示“Correct!”,继续下一次答题。循环结束后,计算用户的得分并输出,程序结束。注:用户得分的规则是,每答对一道题,得10分,满分为100分。程序的流程如图10所示:图103.3 步骤实现此案例需要按照如下步骤进行。步骤一:定义类及 main方法首先定义一个名为 AdditionTest的类,并在类中添加Java应用程序的主方法main,代码如下所示:1. public class AdditionTest 2. public static void main(String args) 3. 4. 步骤二:准备在main方法中,输出程序即将开始的提示信息,并实例化Scanner类,用于准备接收用户从控制台输入的数字,然后,声明变量 score 用于记载用户的得分。代码如下所示:1. import java.util.Scanner;2. public class AdditionTest 3. public static void main(String args) 4. System.out.println(将开始 10 次加法测试. );5. Scanner scanner = new Scanner(System.in);6. /用于记载分数7. int score = 0;8. 9. 注意:此步骤中,需要导入java.util包下的Scanner类。步骤三:构建循环使用 for 语句,构建 10 次循环。在循环中,使用 Math类的random 方法返回两个 0 到 1 之间的随机数(包含 0,不包含 1),然后将所产生的数值乘以 100,并取其整数部分,则可以生成两个 0 到 99 之间的随机整数(包含0,也包含 99),表示加法题目中的两个加数。计算加法运算的结果,并输出题目,代码如下:1. import java.util.Scanner;2. public class AdditionTest 3. public static void main(String args) 4. System.out.println(将开始 10 次加法测试. );5. Scanner scanner = new Scanner(System.in);6. /用于记载分数7. int score = 0;8. /构建 10 次循环9. for (int i=1;i=10;i+) 10. /随机生成两个加数11. int a = (int) (Math.random() * 100);12. int b = (int) (Math.random() * 100);13. int result = a + b;14. 15. /输出需要计算的加法表达式16. System.out.println( + i + ). + a + + + b + = ?);17. System.out.print(请输入答案(输入-1退出): );18. 19. 20. 步骤四:判断录入得到用户的录入后,进行判断:如果用户录入的为1,则需要提前退出循环;如果用户录入的答案错误,则提示“Error!”,并继续下一次答题;如果用户录入的答案正确,则提示“Correct!”,并计算用户的得分,然后继续下一次的答题。用户得分的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大狮子和小老鼠的课件
- 2024年亳州涡阳县县直公立医院和乡镇卫生院招聘真题
- 2025年油气回收设备项目立项申请报告
- 大桥倒塌知识培训内容课件
- 屠宰企业食品安全知识培训课件
- 新兴市场联营协议
- 子公司合伙协议书
- 输煤系统检修维护应急预案(3篇)
- 国营农场安全生产应急预案(3篇)
- 尤里加加林纪念碑课件
- 2025年国家能源集团陕西公司招聘笔试冲刺题(带答案解析)
- 关于成立印刷包装公司可行性研究报告(范文)
- 公司之间罚款协议书
- T/CECS 10246-2022绿色建材评价智能坐便器
- 2025年中国铂金属制品市场现状分析及前景预测报告
- 2025-2030年中国硅酸钇镥(LYSO)市场深度调查与发展前景预测报告
- TSG 23-2021气瓶安全技术规程
- 2025年渠道管理及维护工技能资格知识考试题与答案
- CCF全国青少年信息学奥林匹克联赛NOIP 2024真题
- 社区健康教育知识讲座
- 监护学徒协议书范本
评论
0/150
提交评论