@Tean
2016-05-27T00:49:51.000000Z
字数 4634
阅读 2118
Java
- 什么是循环语句
- 掌握
while循环- 掌握
do...while循环- 掌握
for循环- 掌握
break语句- 掌握
continue语句
奥巴马Java考试成绩未达到自己的目标。为了表明自己勤奋学习的决心,他决定写一百遍“好好学习,天天向上!”
System.out.println("第1遍写:好好学习,天天向上!");System.out.println("第2遍写:好好学习,天天向上!");……System.out.println("第100遍写:好好学习,天天向上!");
现决定写一万遍“好好学习,天天向上!” ,怎么办?
顺序结构的程序语句只能被执行一次。如果您想要同样的操作执行多次,就需要使用循环结构。
Java中有三种主要的循环结构:
while循环do...while循环for循环
JDK1.5中新增了增强for循环,主要用于数组或集合的遍历。
while循环是Java中最基本的循环语句,当它的条件判断是true时,while 语句会重复执行循环体块,流程图如下:

特点:
上图可知:如果一开始循环条件就为false的话,则循环体一次也不可能执行,由此可知while循环的特点为:先判断,再执行。
语法结构:
while(条件判断) {// TODO 循环体}
案例1:
输出100遍“好好学习,天天向上”。
int i = 1;while(i <= 100) { // 如果要10000遍,只需在这里把100改为10000System.out.println("好好学习,天天向上");i++; // 一定要加,否则出现死循环}
温馨提示:如果在命令行窗口执行时出现死循环,可按
Ctrl + C强制中断程序。
案例2:
输出1~100中所有的偶数。
int i = 1;while(i <= 100) {if(i % 2 == 0) {System.out.print(i + " ");}i++;}
练习1:
求0~100中所有的奇数和。
练习2:
计算10!(10的阶乘)结果;
练习3:
打印1-100内能被3整除,不能被5整除的数字。
练习4:
求出练习3中的满足条件数字的个数。
对于while语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。
拉登经过刻苦的学习后,奥巴马给拉登一道测试题,让拉登先上机编写程序完成,然后奥巴马检查是否合格。如果不合格,则继续编写。
do…while循环和while循环相似,不同的是,do…while循环至少会执行一次。
特点:先执行,再判断

语法结构
do {// TODO 循环操作} while(循环条件); // 切记此处的分号不能丢
案例
上文中问题
String answer = "";do{System.out.println("上机编写程序!");System.out.print("合格了吗?(y/n)");answer = input.next();} while(!"y".equals(answer));System.out.println("恭喜你通过了测试!");
温馨提示:循环条件中出现的变量不能是在do后面{}里声明的。do后面{}里声明的变量只能在自己{}里使用。
练习
1. 循环录入牛顿的5门课成绩,求平均分。
2. 从控制台录入一个整数,判断该数字是否是1~5中的整数,如果不是,则让用户继续输入;如果是,则停止录入。
3. 使用do-while循环:输出询问“我爱你,嫁给我吧?”,选择“你喜欢我吗?(y/n):",如果输入为y则打印”我们形影不离“,若输入为n,则继续询问
- while循环
- 先判断,再执行。
- 循环体有可能一次都不执行。
- do...while循环
- 先执行,再判断。
- 循环体至少执行一次。
比较while和for实现输出100次“好好学习,天天向上”。
/* 用while循环实现 */int i = 1;while(i < = 100) {System.out.println("好好学习,天天向上");i++;}/* 用for循环实现 */for(int i = 1; i <= 100; i++) {System.out.println("好好学习,天天向上");}
由上述案列不难看出for循环比while更加简洁。
语句:
for( ①参数初始化 ; ②条件判断 ; ③更新循环变量 ) {// TODO ④循环操作}
执行顺序: ① -> ② -> ④ -> ③ -> ② -> ④ -> ③ - >... -> ②的结果为false结束
案例
循环输入八戒同学大四结业考试的5门课成绩,并计算平均分。
String name = "八戒";int score = 0;int sum = 0;double avg;for(int i = 0; i < 5; i++){ //循环5次录入5门课成绩System.out.print("请输入5门功课中第" + (i+1) + "门课的成绩: ");score = input.nextInt(); //录入成绩sum = sum + score; //计算成绩和}avg = sum / 5; //计算平均分System.out.println(name + "的平均分是:" + avg);
常见问题1:
public static void main(String[] args) {int i;for( ; i < 10; i++){System.out.println("这是 " + i);}}
常见问题2:
public static void main(String[] args) {for(int i = 0; ; i++){System.out.println("这是 " + i);}}
常见问题3:
public static void main(String[] args) {for(int i = 0; i < 10; ){System.out.println("这是 " + i);}}
常见问题4:
public static void main(String[] args) {for( ; ; ) {System.out.println("这是测试");}}
练习:
1. 求1~100中不能被3整除的数之和。
2. 循环录入10位顾客的年龄,求30岁以下(含30岁)的人所占比例。(例:结果显示:30岁以下所占比例为:30%)
学校举行4000米长跑比赛,八戒童鞋跑到第8圈的时候快累死了,要退出比赛。
for (int i = 0; i < 10; i++) {// 跑400米;if ( 不能坚持 ) {//退出比赛}}
break:改变程序控制流
- 用于switch语句结构中跳出switch。
- 用于while、do...while、for中时,可跳出循环而执行循环后面的语句
- break通常在循环中与条件语句一起使用,以达到某种条件时结束循环。
案例:
循环录入某学生5门课的成绩并计算平均分,如果某分数录入为负,停止录入并提示录入错误。
// ... 省略变量声明代码for(int i = 0; i < 5; i++){ //循环5次录入5门课成绩System.out.print("请输入第" + (i+1) + "门课的成绩: ");score = input.nextInt();if(score < 0){ //输入负数System.out.println("录入错误!");break; // 跳出循环}sum = sum + score; //累加求和}
练习:
1~10之间的整数相加,得到累加值大于20的当前数。
- 提示:
- 使用循环进行累加,从1到10
- 判断累加值是否大于20
- 如果大于20,则跳出循环,并打印当前值
- 只能用在循环里。
- 跳过循环体中剩余的语句而执行下一次循环
for(int i = 0; i<10;i++){// 跑400米;if(!口渴){continue; // 不喝水,继续跑}// 接过水壶,喝水;}
案例:
循环录入Java课的学生成绩,统计分数大于等于80分的学生比例。
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 + "%");
- 使用场合
- break可用于switch结构和循环结构中。
- continue只能用于循环结构中。
- 作用(循环结构中)
- break语句终止整个循环,程序跳转到循环外的下一条语句。
- continue跳出本次循环,进入下一次循环。
- 语法:
while(条件) {// 循环体}do {// 循环体} while(条件);for(初始化; 条件; 循环变量更新) {// 循环体}
用户登录验证。验证次数最多3次
登录成功条件:用户名为:jim,密码为:123456
- 二重循环是一个循环体内又包含另一个完整的循环结构。
- 在二重循环中,外层循环变量变化一次,内层循环变量要从初始值到结束值变化一遍。
- 在二重循环中可以使用break、continue语句控制程序的执行。
// 打印等腰三角形for(int i = 0; i < 5; i++) {for(int j = 0; j < 5 - i - 1; j++) {System.out.print(" ");}for(int j = 0; j < 2 * i + 1; j++) {System.out.print("*");}System.out.println();}
- 打印输出0~200之间能被7整除但不能被4整除的所有整数;要求每行显示6个数据。
- 利用二重循环打印九九乘法口诀表。
- 求s=a+aa+aaa+aaaa+aa...a 的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5 个数相加),几个数相加由键盘录入。
- 打印出如下图案:
*************************
5.从键盘录入3个数,按大小顺序输出。
6. 求1~5的阶乘之和。
7. 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:将第一位和第四位交换,第二位和第三位交换。从键盘录入一个整数求加密后的数字。
8. 打印出100~999之间所有的"水仙花数",所谓"水仙花数"是指一个三位数,其个位数立方加十位数立方加百位数立方之和等于该数本身。例如:153 是一个 "水仙花数 ",因为 153 = 1的三次方+5的三次方+3的三次方。
9. 循环录入3个班的成绩,每个班3个人,求3个班的总成绩和每个班级的平均分。
10. 打印出1~100中所有素数(提示:素数是只能被1和自己整除的正整数,1不是素数)。