问题:循环录入学生Java课程的成绩,统计分数大于等于80分的学生的比例。
分析:使用循环语句录入学生成绩并累计人数,这对我们来说并不是难题,但是如果仅累计满足分数大于等于80分的人数,该怎么办呢?这时可以使用continue语句控制累计操作是否进行,如示例7所示。
示例7
package cn.jbit.loops1; import java.util.Scanner; public class ContinueDemo { /** * 统计80分以上学生比例 */ public static void main(String[] args) { int score; // 成绩 int total; // 班级总人数 int num = 0; // 成绩大于或等于80分的人数 Scanner input = new Scanner(System.in); System.out.print("输入班级总人数: "); total = input.nextInt(); // 输入班级总数 for (int i = 0; i < total; i++) { System.out.print("请输入第" + (i + 1) + "位学生的成绩: "); score = input.nextInt(); if (score < 80) { continue; } num++; } System.out.println("80分以上的学生人数是: " + num); double rate = (double) num / total * 100; System.out.println("80分以上的学生所占的比例为:" + rate + "%"); } }
程序运行结果如图6.7所示。
图6.7示例7的运行结果
分析程序,变量total保存班级总人数,变量num保存80分以上的学生人数,i从0开始循环一直到total-1。如果录入的分数大于等于80,则num自加1,然后结束本次循环,进入下一次循环;如果录入的分数小于80,则执行continue,然后结束本次循环,进入下一次循环。现在回想一下刚才学过的break语句,是不是能够理解它们之间的区别了?如果体会得还不是很深刻,就赶紧动手写一写下面这个程序吧!
问题:求1~100之间个位数字不是2、3、4、7,并且不能被3整除的整数之和。
分析:仔细分析,会发现这个问题仍然是对某些满足条件的值求和,只不过这次的条件复杂了。如果这个值的个位是2、3、4、7或者能被3整除,则使用continue语句结束此次循环,进行下一次循环。
示例8
package cn.jbit.loops1; public class ContinueDemo2 { public static void main(String[] args) { int sum = 0; //定义变量保存累加值 for (int i = 1; i <=100; i++) { //判断i是否满足条件 if ( i % 10 == 2 || i % 10 == 3 || i % 10 == 4 || i % 10 == 7 || i % 3 == 0) { continue; } sum = sum + i; //进行累加 } System.out.println("1~100 之间个位数不是2、3、4、7," + "并且不能被3整除的整数和是:" + sum); } }
在示例8中,使用if语句进行条件判断。如果i对10取余等于2,或者i对10取余等于3,或者i对10取余等于4,或者i对10取余等于7,或者i对3取余等于0,则说明i不是所需要的数,不进行累加,而进入下一次的循环。
小结:continue语句可以用于for循环结构,也可以用于while和do-while循环结构。在for循环结构中,continue语句使程序先跳转到迭代部分,然后判断循环条件。如果为true,则继续下一次循环;否则终止循环。在while循环结构中,continue语句执行完毕后,程序将直接判断循环条件。continue语句只能用在循环结构中。
学习了 break和continue语句,可知这两个语句都能改变循环操作,但它们之间有什么区别呢?
对比:
在循环结构中:
break语句用于终止某个循环,程序跳转到循环体外的下一条语句。
continue语句用于跳出本次循环,进入下一次循环的语句。
6.2.3 技能训练
前面已经学习了 Java语言中的三种循环,也知道了 break语句和continue语句的使用方法,下面通过上机练习来巩固知识。
上机练习3
指导——循环录入会员信息
训练要点
for循环结构。
continue 语句。
需求说明
商场为了维护会员信息,需要将其信息录入系统中,具体要求如下。
♦ 循环录入三位会员的信息(会员号、会员生曰、积分)。
♦ 判断会员号是否合法(四位整数)。
♦ 若会员号合法,则显示录入的信息,否则显示录入失败。
♦ 程序运行结果如图6.8所示。
图6.8上机练习3的运行结果
实现思路及关键代码
(1) 定义三个变量,分别记录会员号、会员生曰和会员积分。
(2) 利用循环录入三位会员的信息。
(3) 如果会员号无效,利用continue实现程序跳转。
参考解决方案
package cn.jbit.loops1; import java.util.Scanner; public class AddCustomer { /* * 循环录入会员信息 */ public static void main(String[] args) { System.out.println("MyShopping管理系统 > 客户信息管理 > 添加客户信息\n"); int custNo = 0; //会员号 String birthday; //会员生日 int points = 0; //会员积分 Scanner input = new Scanner(System.in); for(int i = 0; i < 3; i++){ //循环录入会员信息 System.out.print("请输入会员号(<4位整数>):"); custNo = input.nextInt(); System.out.print("请输入会员生日(月/日<用两位整数表示>):"); birthday = input.next(); System.out.print("请输入会员积分:"); points = input.nextInt(); if(custNo < 1000 || custNo > 9999){ //会员号无效则跳出 System.out.println("客户号" +custNo+ "是无效会员号!"); System.out.println("录入信息失败\n"); continue; } System.out.println("您录入的会员信息是:"); System.out.println(custNo+ " " +birthday+ " " +points+ "\n"); } System.out.println("程序结束!"); } }
上机练习4
练习——验证用户登录信息
需求说明
用户登录系统时需要输入用户名和密码,系统对用户输入的用户名和密码进行验证。验证次数最多三次,超过三次则程序结束。根据验证结果的不同(信息匹配/信息不匹配/三次都不匹配),执行不同的操作。假设正确的用户名和密码分别为jim和123456,三种情况的运行结果分别如图6.9-图6.11所示。
图 6.9 信息匹配运行结果 图 6.10 信息不匹配运行结果 图 6.11 3次信息不匹配运行结果
提示:
定义三个变量,分别保存用户名、密码和用户输入的次数。
利用循环结构输入用户名和密码,利用continue语句和break语句控制程序流程。
代码展示:
package cn.jbit.loops1; import java.util.Scanner; public class LoginCheck { /** * 验证用户名和密码(根据匹配情况执行不同操作) */ public static void main(String[] args) { int i = 0; String userName; String password; Scanner input = new Scanner(System.in); for(i = 0; i < 3; i++){ System.out.print("请输入用户名:"); userName = input.next(); System.out.print("请输入密码:"); password = input.next(); if("jim".equals(userName) && "123456".equals(password)){ //匹配 System.out.println("欢迎登录MyShopping系统!"); break; }else{ //不匹配 System.out.println("输入错误!您还有" +(2-i)+ "次机会!\n"); continue; } } if(i == 3){ //3次都不匹配 System.out.println("对不起,您3次均输入错误!"); } } }
6.3 循环结构总结
到目前为止,我们已经学习了 Java提供的三种最主要的循环结构,它们是while、do-while和for循环结构。无论哪一种循环结构,都有四个必不可少的部分:初始部分、循环条件、循环体、迭代部分,缺少了任何一个都可能造成严重的错误。下面从三个方面对这三种循环结构进行比较。
语法不同。
while循环语句如下。
while (<条件〉){ //循环体 } do-while循环语句如下。 do { //循环体 } while (< 条件〉); for循环语句如下。 for(初始化;条件;迭代){ //循环体 }
执行顺序不同。
♦ while循环结构:先进行条件判断,再执行循环体。如果条件不成立,退出循环。
♦ do-while循环结构:先执行循环体,再进行条件判断,循环体至少执行一次。
♦ for循环结构:先执行初始化部分,再进行条件判断,然后执行循环体,最后进行迭代部分的计算。如果条件不成立,跳出循环。
适用情况不同。
在解决问题时,对于循环次数确定的情况,通常选用for循环结构;对于循环次数不确定的情况,通常选用while和do-while循环结构。
本章总结
for循环结构的语法格式如下。
for (表达式 1; 表达式 2; 表达式 3) {
//循环体
}
表达式1:循环结构的初始部分,为循环变量赋初值。
表达式2:循环结构的循环条件。
表达式3:循环结构的迭代部分,通常用来修改循环变量的值。
在循环中,可以使用break和continue语句控制程序的流程。
♦ break语句用于终止某个循环,程序跳转到循环体外的下一条语句。
♦ continue语句用于跳出本次循环,进入下一次循环。