08_Java筑基之循环语句

08_Java筑基之循环语句

一. 循环结构

1. 什么是循环

循环就是在循环条件满足的情况下,反复执行特定代码.

2. 为什么要使用循环

当我们要打印100次helloworld,
或者我们想实现1-100的和,那么如何做?

1+2+3+4+5....
int sum = 0;
sum = sum + 1;
sum = sum + 2;
sum = sum + 3;
sum = sum + 4;
sum = sum + 5; 

可以发现有一些是相同的内容,这些相同的内容我们就可以采用循环的方式来实现.

3. 循环的分类

1. while 循环;

2. do/while 循环;

3. for循环.

4. 循环的组成部分

1.初始化部分:对循环变量赋初值;

2.循环条件部分:判断循环变量是否超出某个界限;

3.循环体部分:要循环执行的具体逻辑;

4.更新循环变量部分:修改循环变量的值.

二. while循环

1. 格式

while(循环条件){
    语句块(循环体)
}

2. 执行过程

先判断循环条件表达式的值,若为true,则执行循环体,然后再次判断条件并反复执行,直到条件不成立为止.

特点:先判断再执行.

3. while循环练习

练习一:

需求: 打印输出5次helloworld

//1.初始化部分
int count = 0;

//2. 循环条件 
while(count<5){
    //3.循环体
    System.out.println("hello world"); 
    
    //4. 更新循环变量
    count++;
}

练习二:

需求: 打印输出 1--10

int i =1;
while(i<=10){
    System.out.println(i);
    i++; 
}

练习三:

求1-100的和

//1.初始化变量
int i=1;
int sum=0;//保存和 

//2.循环条件 
while(i<=100){
  sum=sum+i;//sum+=i;
  i++; 
}
System.out.println("1-100的和是:"+sum);

练习四:

需求: 求 10 的阶乘.

int sum = 1;
int j = 1;
while(j<=10){
    sum=sum*j;
    j++; 
}
System.out.println("10的阶乘"+sum);

练习五:

需求: 求 100以内的 偶数的和.

int z=2;
int sum=0;
while(z<=100){
    sum=sum+z;
    z+=2; 
}
System.out.println("1-100的偶数的和是:"+sum);

或:

int z=1;
int sum=0;
while(z<=100){
    if(z%2==0){
       sum=sum+z;
    }
    z++; 
}
System.out.println("1-100的偶数的和是:"+sum);

三. do-while循环

1. 格式

do {语句块} while(条件表达式);

2. 执行过程

先执行语句,再判表达式的值,若为true,再执行语句,否则结束循环. 

特点:先执行,再判断.

3. 练习

练习一

需求: 打印三次helloworld

//1. 初始化部分 
int i = 0;

do{
    //2.循环体 
    System.out.println("Hello World!"); 
    //4.循环变量变化部分
    i++;
}while(i<3);//3.循环条件

练习二

用do/while实现打印100以内的奇数

int j = 1;
do{
    /*if(j%2==1){
        System.out.println(j);
    }
    j++;*/
    
    System.out.println(j);
    j+=2;
}while(j<100);

练习三

求 100 以内能够被3整除,但是不能被5整除的数打印输出.

int z = 3; 
do{
    if(z%3==0 && z%5!=0){
        System.out.println(z);
    }
    z++;
}while(z<=100);

4. while 和 do-while的区别

1. 执行过程不同:
while 先执行循环条件,然后再执行循环体,一句话:先判断,再执行;
do/while 先执行循环体,然后再执行循环条件,一句话:先执行,再判断.

2. 当第一次不满足循环条件的情况下:
while循环不能执行循环体, do while 可以执行一次.

四.for循环

1. 格式

for(表达式1[循环变量初始化];表达式2[循环条件判断]; 表达式3[更新循环变量]){ 
   循环体
}

2. 执行过程

首先计算表达式1,接着计算表达式2,若表达式2的值为true,则执行循环体,接着计算表达式3,再判断表达式2的值. 
依次重复下去,直到表达式2的值为false.

特点:先判断,再执行.

3. 练习

练习一:

需求: 打印输出3次hello World

for(int i = 0;i<3;i++){
    System.out.println("Hello World!");
}

练习二:

打印100以内能被4整除但不能被7整除的数据,每行打印6个.

int count = 0;
for(int i = 1; i<=100; i++){
    if(i%4==0 && i%7!=0){
        System.out.print(i+"\t");
        count++;// 6
        if(count%6==0){
            System.out.print("\n");
        }
    } 
}

练习三:

使用for实现1-100的和.

public class Demo11{
    public static void main(String[] args){
        int sum=0;
        for(int i=1;i<=100;i++){
            sum+=i; 
        }
        System.out.println("1-100的和是:"+sum); 
    }
}

练习四:

实现加法表,比如用户输入数字6:
0+6=6
1+5=6
2+4=6 ... 
6+0=6

import java.util.Scanner;
public class Demo12{
    public static void main(String[] args{ 
        Scanner input=new Scanner(System.in);   
        System.out.println("请输入一个数字");  
        int num=input.nextInt();
        for(int i=0,j=num;i<=num;i++,j--){
            System.out.println(i+"+"+j+"="+(i+j));
        } 
    }
}

4. for循环的特殊形式

1. 省略表达式2:
   表达式2一般不可省略,否则为无限循环(死循环) 
   for (int i=1; ; i++) sum=sum+i;
   // 相当于条件永真、永不为false;

2. 表达式3亦可省略,但在循环体中须有语句修改循环变量;以使表达式2在某一时刻为false而正常结束循环.
  for (int sum=0,i=1 ;i<=100; ){
     sum=sum+i;
     i++; 
  }

3. 若同时省略表达式1和表达式3,则相当于while(表达式2)语句:
    int i=0;
    for( ;i<=100;){
       sum+=i; 
       i++;
    }
    
4. 三个表达式均省略,即for(;;)语句,此时相当于while(true)语句.

5. 三种循环的比较和注意事项

三种循环的比较: 

1. 语法不一样:
while(条件){...}

do{...}while(条件);

for(表达式1;表达式2;表达式3){...}

2. 执行顺序不同:
while 和 for 都是先判断条件,然后再执行循环体;
do while 先执行循环体,再判断条件.

注意事项:
1.对于同一问题,三种循环可以相互替代;
2.循环次数确定的情况优先选用for循环,循环次数不确定的情况,通常选用while和do-while循环;
3.要防止无限循环---死循环.

五. 多重循环之二重循环

多重循环就是循环中嵌套其他循环.

特点:
外层循环执行一次,内层循环执行一遍.

1. 练习一,使用*号打印矩形

// 外层循环控制行,内层循环控制列!
// *******
// *******
// *******
// *******

for (int j = 0;j<4 ; j++){
    for(int i = 0; i< 7 ; i++){
        System.out.print("*");
    }
    System.out.println();
}

2. 练习二: 打印直角三角形

/*
找规律
*     1 1 
**    2 2 
***
****
***** 5 5
*/

for(int i = 1;i<=5 ;i++ ){
    // 1 2 3 4 5
    for(int j = 1;j<=i ;j++ ){
       System.out.print("*");
    }
    System.out.println();
}

3. 练习三: 输出等腰三角形

*          1   1  1*2-1
***        2   3  2*2-1
*****      3   5  3*2-1
*******    4   7  4*2-1
*********  5   9  5*2-1

    *      1   4  5-1=4
   ***     2   3  5-2=3
  *****    3   2  5-3=2
 *******   4   1  5-4=1
*********  5   0  5-5=0

for (int i = 1;i<=5 ;i++ ){ //空格
    for(int k=1;k<=5-i;k++){
        System.out.print(" ");
    }
    // 1 2 3 4 5
    for (int j = 1;j<=i*2-1 ;j++ ){
        System.out.print("*");
    }
    System.out.println();
}

4. 练习四: 输出九九乘法表

*
**
***
****
*****

1*1=1
1*2=2 2*2=4
1*3=3 2*3=6  3*3=9

// 99乘法表
for (int i = 1;i<=9 ;i++ ){
    for (int j = 1;j<=i ;j++ ){        
       System.out.print(i+"*"+j+"="+i*j+"\t");
    }
    System.out.println();
}

5. 输入学员成绩

一个班级有5个人,3门课程,让你输入每个人每门课的成绩,并打印每个人的总分和平均分.

import java.util.Scanner;
public class Demo18{
    public static void main(String[] args){
        Scanner input=new Scanner(System.in);
        for(int i=0;i<5;i++){//外层循环控制人数 
            System.out.println("请输入第"+(i+1)+"个人的姓名"); 
            String name=input.next();
            double sum=0;//存每个人总分
            double avg=0;//存每个人的平均分
            for(int j=0;j<3;j++){
                System.out.println("输入第"+(j+1)+"门课成绩"); 
                double score=input.nextDouble();
                sum+=score;
            }
            avg=sum/3; 
            System.out.printf(name+"的总分是:"+sum+",平均分是:%.2f",avg); 
            System.out.println();
       } 
    }
}

六. 跳转语句--流程控制语句

break: 语句用于终止某个语句块的执行;

continue: 语句用于跳过某个循环语句块的一次执行,继续下一次执行(结束本次循环,继续下一次循环).

1. break

1.1 使用场合:

  • switch结构中:跳出(终止)switch语句.
  • 循环结构中:跳出(终止)循环.

1.2 作用:

退出switch和循环结构(如果有多重循环,默认跳出离自己最近的循环)

for (int i = 1; i <3 ; i++ ){
    for (int j = 1;j<5 ;j++ ){
        if(j == 2){
            break;//可以指定跳出的循环.
        }
        System.out.println(i+" "+j);
    } 
}

2. 使用Lable标签实现跳出指定的循环(了解).

out : for(int i = 1;i <3;i++){//定义一个标签out 
        for (int j = 1;j<3 ;j++ ){
            if(j == 2){
            break out;//可以指定跳出的循环
        }
        System.out.println(i+" "+j);
     }  

上机练习1:

打印1到10个数,遇到4的倍数程序自动退出.

提示:如果i%4==0,则执行break命令.

上机练习2:

要求:小张参加长跑比赛5000米,一共10圈,如果小张坚持不下来,可以中途退出比赛,使用程序描述这个场景.

import java.util.Scanner;
public class Demo21{
    public static void main(String[] args){
        Scanner input=new Scanner(System.in); 
        System.out.println("小张准备参加5000米长跑"); 
        int count=1;
        do{
            System.out.println("开始跑第"+count+"圈"); 
            System.out.println("跑完了第"+count+"圈"); 
            count++; System.out.println("还能坚持吗?y/n"); 
            String answer=input.next(); 
            if(!answer.equals("y")){
                break; 
            }
        }while(count<=10);
        
        System.out.println("比赛结束了...."); 
    }
}

3. continue

  • 使用场合:
    continue只能用在循环结构中.

  • 作用: 跳过本次循环,执行下一次循环(如果有多重循环,默认继续执行离自己最近的循环).

for(int i =1;i<4;i++){
    for(int j = 1;j<4 ;j++ ){
        if(j==2){
           continue;
        }
        System.out.println("i="+i + "  j="+j);
    }
}
System.out.println("Hello World!");

4. 使用Label标签改变继续执行的循环

out: for(int i = 1;i<4;i++){
        for(int j = 1;j<4;j++){
            if(j==2){
                continue out ;
            }
            System.out.println("i="+i +"  j="+j);
        }
    }
System.out.println("Hello World!");

上机练习1:

打印1到10个数,遇到4的倍数跳过去.

/* 打印1到10个数,遇到4的倍数跳过去 */
public class Demo23{
    public static void main(String[] args){
        for(int i=1;i<=10;i++){
            if(i%4==0){
                continue;
            }
            System.out.println(i);
        }
    } 
}

上机练习2:

要求:小张参加长跑比赛5000米,一共10圈,如果小张口渴了,喝水后继续跑,使用程序描述这个场景.

/*要求:小张参加长跑比赛5000米,一共10圈,如果口渴了,喝水后继续跑,使用程序这个场景*/

import java.util.Scanner;
public class Demo24{
    public static void main(String[] args{ 
        Scanner input=new Scanner(System.in); 
        System.out.println("小张准备参加5000米长跑"); 
        int count=1;
        do{
            System.out.println("开始跑第"+count+"圈"); 
            System.out.println("跑完了第"+count+"圈"); 
            count++;
            System.out.println("口渴了吗吗?y/n"); 
            String answer=input.next();     
            if(answer.equals("n")){//不渴,继续跑
                continue; 
            }
            System.out.println("喝口水");
        }while(count<=10);
        
        System.out.println("比赛结束了...."); 
    }
}

七. 总结

循环有四部分:
1.循环变量初始化;
2.循环条件;
3.循环体;
4.循环变量更新.

1. 三种循环语句

while:
先判断条件,再执行循环体.

do while:
先执行循环体,再判断条件,至少执行一次.

for:
先判断条件,再执行循环体.
如果循环次数固定优先使用for,如果次数不确定用while和do while.

2. 二重循环(难点)
外层循环执行一次,内存循环执行一遍.

3. 跳转语句
break: 跳出switch和循环;
continue: 结束本次循环,继续下一次循环.
发布了234 篇原创文章 · 获赞 74 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/syc000666/article/details/102720909
今日推荐