[关闭]
@Tean 2016-05-27T00:49:51.000000Z 字数 4634 阅读 2118

Day04_循环语句

Java


学习目标

  • 什么是循环语句
  • 掌握while循环
  • 掌握do...while循环
  • 掌握for循环
  • 掌握break语句
  • 掌握continue语句

一、循环语句

1.1 为什么需要循环

奥巴马Java考试成绩未达到自己的目标。为了表明自己勤奋学习的决心,他决定写一百遍“好好学习,天天向上!”

  1. System.out.println("第1遍写:好好学习,天天向上!");
  2. System.out.println("第2遍写:好好学习,天天向上!");
  3. ……
  4. System.out.println("第100遍写:好好学习,天天向上!");

现决定写一万遍“好好学习,天天向上!” ,怎么办?


顺序结构的程序语句只能被执行一次。如果您想要同样的操作执行多次,就需要使用循环结构。

1.2 Java中的循环

Java中有三种主要的循环结构:

  • while循环
  • do...while循环
  • for循环
  1. JDK1.5中新增了增强for循环,主要用于数组或集合的遍历。

二、while循环

2.1 什么是while循环

while循环是Java中最基本的循环语句,当它的条件判断是true时,while 语句会重复执行循环体块,流程图如下:

while循环

特点
上图可知:如果一开始循环条件就为false的话,则循环体一次也不可能执行,由此可知while循环的特点为:先判断,再执行


语法结构

  1. while(条件判断) {
  2. // TODO 循环体
  3. }

案例1
输出100遍“好好学习,天天向上”。

  1. int i = 1;
  2. while(i <= 100) { // 如果要10000遍,只需在这里把100改为10000
  3. System.out.println("好好学习,天天向上");
  4. i++; // 一定要加,否则出现死循环
  5. }

温馨提示:如果在命令行窗口执行时出现死循环,可按 Ctrl + C 强制中断程序。


案例2
输出1~100中所有的偶数。

  1. int i = 1;
  2. while(i <= 100) {
  3. if(i % 2 == 0) {
  4. System.out.print(i + " ");
  5. }
  6. i++;
  7. }

练习1
求0~100中所有的奇数和。


练习2
计算10!(10的阶乘)结果;


练习3
打印1-100内能被3整除,不能被5整除的数字。


练习4
求出练习3中的满足条件数字的个数。

三、do...while循环

3.1 为什么要用do...while循环

对于while语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。

  1. 拉登经过刻苦的学习后,奥巴马给拉登一道测试题,让拉登先上机编写程序完成,然后奥巴马检查是否合格。如果不合格,则继续编写。

do…while循环和while循环相似,不同的是,do…while循环至少会执行一次。

3.2 什么的do...while循环

特点:先执行,再判断

do...while

语法结构

  1. do {
  2. // TODO 循环操作
  3. } while(循环条件); // 切记此处的分号不能丢

案例
上文中问题

  1. String answer = "";
  2. do{
  3. System.out.println("上机编写程序!");
  4. System.out.print("合格了吗?(y/n)");
  5. answer = input.next();
  6. } while(!"y".equals(answer));
  7. System.out.println("恭喜你通过了测试!");

温馨提示:循环条件中出现的变量不能是在do后面{}里声明的。do后面{}里声明的变量只能在自己{}里使用。


练习
1. 循环录入牛顿的5门课成绩,求平均分。
2. 从控制台录入一个整数,判断该数字是否是1~5中的整数,如果不是,则让用户继续输入;如果是,则停止录入。
3. 使用do-while循环:输出询问“我爱你,嫁给我吧?”,选择“你喜欢我吗?(y/n):",如果输入为y则打印”我们形影不离“,若输入为n,则继续询问

3.3 while循环和do...while循环的区别

  • while循环
    • 先判断,再执行。
    • 循环体有可能一次都不执行。
  • do...while循环
    • 先执行,再判断。
    • 循环体至少执行一次。

四、for循环

4.1 为什么使用for循环

比较while和for实现输出100次“好好学习,天天向上”。

  1. /* 用while循环实现 */
  2. int i = 1;
  3. while(i < = 100) {
  4. System.out.println("好好学习,天天向上");
  5. i++;
  6. }
  7. /* 用for循环实现 */
  8. for(int i = 1; i <= 100; i++) {
  9. System.out.println("好好学习,天天向上");
  10. }

由上述案列不难看出for循环比while更加简洁。

4.2 什么是for循环

语句

  1. for( ①参数初始化 ; ②条件判断 ; ③更新循环变量 ) {
  2. // TODO ④循环操作
  3. }

执行顺序: ① -> ② -> ④ -> ③ -> ② -> ④ -> ③ - >... -> ②的结果为false结束


案例
循环输入八戒同学大四结业考试的5门课成绩,并计算平均分。

  1. String name = "八戒";
  2. int score = 0;
  3. int sum = 0;
  4. double avg;
  5. for(int i = 0; i < 5; i++){ //循环5次录入5门课成绩
  6. System.out.print("请输入5门功课中第" + (i+1) + "门课的成绩: ");
  7. score = input.nextInt(); //录入成绩
  8. sum = sum + score; //计算成绩和
  9. }
  10. avg = sum / 5; //计算平均分
  11. System.out.println(name + "的平均分是:" + avg);

常见问题1

  1. public static void main(String[] args) {
  2. int i;
  3. for( ; i < 10; i++){
  4. System.out.println("这是 " + i);
  5. }
  6. }

常见问题2

  1. public static void main(String[] args) {
  2. for(int i = 0; ; i++){
  3. System.out.println("这是 " + i);
  4. }
  5. }

常见问题3

  1. public static void main(String[] args) {
  2. for(int i = 0; i < 10; ){
  3. System.out.println("这是 " + i);
  4. }
  5. }

常见问题4

  1. public static void main(String[] args) {
  2. for( ; ; ) {
  3. System.out.println("这是测试");
  4. }
  5. }

练习
1. 求1~100中不能被3整除的数之和。
2. 循环录入10位顾客的年龄,求30岁以下(含30岁)的人所占比例。(例:结果显示:30岁以下所占比例为:30%)

五、break语句

5.1 为什么使用break

学校举行4000米长跑比赛,八戒童鞋跑到第8圈的时候快累死了,要退出比赛。

  1. for (int i = 0; i < 10; i++) {
  2. // 跑400米;
  3. if ( 不能坚持 ) {
  4. //退出比赛
  5. }
  6. }

4.2 break

break:改变程序控制流

  • 用于switch语句结构中跳出switch。
  • 用于while、do...while、for中时,可跳出循环而执行循环后面的语句
  • break通常在循环中与条件语句一起使用,以达到某种条件时结束循环。

案例
循环录入某学生5门课的成绩并计算平均分,如果某分数录入为负,停止录入并提示录入错误。

  1. // ... 省略变量声明代码
  2. for(int i = 0; i < 5; i++){ //循环5次录入5门课成绩
  3. System.out.print("请输入第" + (i+1) + "门课的成绩: ");
  4. score = input.nextInt();
  5. if(score < 0){ //输入负数
  6. System.out.println("录入错误!");
  7. break; // 跳出循环
  8. }
  9. sum = sum + score; //累加求和
  10. }

练习
1~10之间的整数相加,得到累加值大于20的当前数。

  • 提示:
    1. 使用循环进行累加,从1到10
    2. 判断累加值是否大于20
    3. 如果大于20,则跳出循环,并打印当前值

六、continue语句

6.1 continue语句

  • 只能用在循环里。
  • 跳过循环体中剩余的语句而执行下一次循环
  1. for(int i = 0; i<10;i++){
  2. // 跑400米;
  3. if(!口渴){
  4. continue; // 不喝水,继续跑
  5. }
  6. // 接过水壶,喝水;
  7. }

案例
循环录入Java课的学生成绩,统计分数大于等于80分的学生比例。

  1. for (int i = 0; i < total; i++) {
  2. System.out.print("请输入第" + (i + 1) + "位学生的成绩: ");
  3. score = input.nextInt();
  4. if (score < 80) {
  5. continue; //结束本次循环,进入下一次循环
  6. }
  7. num++;
  8. }
  9. System.out.println("80分以上的学生人数是: " + num);
  10. double rate = (double) num / total * 100;
  11. System.out.println("80分以上的学生所占的比例为:" + rate + "%");

6.2 break和continue的区别

  • 使用场合
    • break可用于switch结构和循环结构中。
    • continue只能用于循环结构中。
  • 作用(循环结构中)
    • break语句终止整个循环,程序跳转到循环外的下一条语句。
    • continue跳出本次循环,进入下一次循环。

七、循环总结

7.1 三种循环区别

  • 语法
  1. while(条件) {
  2. // 循环体
  3. }
  4. do {
  5. // 循环体
  6. } while(条件);
  7. for(初始化; 条件; 循环变量更新) {
  8. // 循环体
  9. }

7.2 案例和练习

用户登录验证。验证次数最多3次
登录成功条件:用户名为:jim,密码为:123456

八、二重循环

  • 二重循环是一个循环体内又包含另一个完整的循环结构。
  • 在二重循环中,外层循环变量变化一次,内层循环变量要从初始值到结束值变化一遍。
  • 在二重循环中可以使用break、continue语句控制程序的执行。
  1. // 打印等腰三角形
  2. for(int i = 0; i < 5; i++) {
  3. for(int j = 0; j < 5 - i - 1; j++) {
  4. System.out.print(" ");
  5. }
  6. for(int j = 0; j < 2 * i + 1; j++) {
  7. System.out.print("*");
  8. }
  9. System.out.println();
  10. }

九、作业

  1. 打印输出0~200之间能被7整除但不能被4整除的所有整数;要求每行显示6个数据。
  2. 利用二重循环打印九九乘法口诀表。
  3. 求s=a+aa+aaa+aaaa+aa...a 的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5 个数相加),几个数相加由键盘录入。
  4. 打印出如下图案:
  1. *
  2. ***
  3. *****
  4. *******
  5. *****
  6. ***
  7. *

5.从键盘录入3个数,按大小顺序输出。
6. 求1~5的阶乘之和。
7. 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:将第一位和第四位交换,第二位和第三位交换。从键盘录入一个整数求加密后的数字。
8. 打印出100~999之间所有的"水仙花数",所谓"水仙花数"是指一个三位数,其个位数立方加十位数立方加百位数立方之和等于该数本身。例如:153 是一个 "水仙花数 ",因为 153 = 1的三次方+5的三次方+3的三次方。
9. 循环录入3个班的成绩,每个班3个人,求3个班的总成绩和每个班级的平均分。
10. 打印出1~100中所有素数(提示:素数是只能被1和自己整除的正整数,1不是素数)。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注