Java最全for、while、do--while循环详细讲解

Java最全for、while、do–while循环详细讲解

友情提示:要想学的好,代码不能少,多敲代码多练习

循环结构

循环:就是重复的执行,程序中某些代码也是需要重复执行的。使用循环的好处,减少重复代码量

for循环

语法

for(初始化变量;循环条件;改变变量的值){
	循环体;
}

效果:循环体会被重复执行
for循环的执行的顺序:
        1.获取变量的初始值
        2.判断循环条件是否成立,如果成立,则执行循环体;如果不成立,结束整个循环
        3.给变量重新赋值,进行下一次循环判断
public class Demo1 {
    public static void main(String[] args) {
        //循环3次的for循环
        for(int i=0;i<3;i++){
            System.out.println("被循环的代码");
        }
    }
}

上面这个代码详细讲解一下循环过程,帮助大家理解

public class Demo1 {
    public static void main(String[] args) {
        /*
        第一次循环:
            初始化:  i = 0
            判断循环条件:   i<3  成立
            打印循环体:
            执行i++:   i = 1
        第二次循环:
             判断循环条件: i<3   成立
             打印循环体i:
             执行i++:   i = 2
         第三次:
             判断循环条件: i<3   成立
             打印循环体i:
             执行i++:   i = 3
         第四次:
            判断循环条件: i<3  不成立
            循环结束
         */
        int i;
        for(i=0;i<3;i++){
            System.out.println("被循环的代码" + i);
        }
        System.out.println(i);//3

    }
}

练习题

1.计算1~100的所有整数的和

public class Practise1 {
    public static void main(String[] args) {
        int sum = 0;//用来记录累加的和
        for (int i=1;i<=100;i++){//i的取值范围是:1~100  刚好就是需要被累加的所有的整数
            sum += i;
        }
        System.out.println("累加的和:"+sum);
    }
}

2.打印出所有的水仙花数,水仙花数:3位的正整数,每一个位的立方加起来的和等于这个数本身,比如153

public class Practise2 {
    public static void main(String[] args) {
        /*
        打印出所有的水仙花数
        水仙花数:3位的正整数,每一位的立方加起来的和等于这个数本身,比如153
        思路:将每一个3位的正整数都判断一次
         */
        //1.取出每一个3位的正整数
        for (int i = 100; i <= 999; i++) {//i的取值范围:100~999 刚好就是所有的3位正整数
            //2.取出该数每一位的值
            int ge = i % 10;
            int shi = i / 10 % 10;
            int bai = i / 100;
            //3 判断每一位数的立方的和是否等于这个数本身
            if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i){
                System.out.println(i);
            }
        }
    }
}

嵌套循环

for(...){
	for(...){
	
	}
}

效果:
    外层循环每执行一次,内存循环都会完整的执行一遍
     
public class Demo2 {
	public static void main(String[] args) {
        for(int i=0;i<5;i++){
            for (int j = 0; j < 5; j++) {
                System.out.println(i +"," + j);
            }
        }
    }
}

打印图形练习

1.打印矩形:
* * * *
* * * *
* * * *
* * * *
要求:一个输出语句只能打印一个*

public class Practise3 {
    public static void main(String[] args) {
        for (int j=0;j<4;j++){
            for (int i=0;i<4;i++){
                System.out.print("* ");
            }
            System.out.println();
        }
    }
}
2.打印三角形
*  
* * 
* * * 
* * * *
要求:一个输出语句只能打印一个*
     
public class Practise4 {
    public static void main(String[] args) {

        for (int j=0;j<4;j++){//行数
            /*
            i < 数字
            这个数字就不能是一个固定的值
            应该是一个变量
            这个变量的值的规律:外层循环第一次循环是,数字为1
                            外层循环第二次循环是,数字为2
                            外层循环第三次循环是,数字为3
                            外层循环第四次循环是,数字为4
             */
            for (int i=0;i<j+1;i++){//列数
                System.out.print("* ");
            }

            System.out.println();
        }
    }
}
3.打印如下图形:
*****
****
***
**
*
public class Practise4 {
public static void main(String[] args) {
  for(int i = 0;i<5;i++){
	for(int j = 5;j>i;j--){
		System.out.print("*");
		}
		System.out.println();
	}
}
4.打印如下图形:
*****
 ****
  ***
   **
    *
public class Practise4 {
public static void main(String[] args) {
  for(int i = 0;i<5;i++){
       for(int k = 0;k<i;k++){
            System.out.print(" ");
       }
       for(int j = 5;j>i;j--){
            System.out.print("*");
       }
       System.out.println();
  }
}
5.打印如下图形:
  *
 ***
*****
public class Practise4 {
public static void main(String[] args) {
 for(int i = 0;i<3;i++){
      for(int k = 2;k>i;k--){
           System.out.print(" ");
      }
      for(int j = 0;j<i*2+1;j++){
           System.out.print("*");
      }
      System.out.println();
 }
}
6.打印如下图形:
  *
 * *
*****
public class Practise4 {
public static void main(String[] args) {
 for(int i = 0;i<3;i++){
      for(int k = 2;k>i;k--){
           System.out.print(" ");
      }
      for(int j = 0;j<i*2+1;j++){
           if(i==0 || i==2 || j==0 || j==i*2){
                System.out.print("*");
           }else{
                System.out.print(" ");
           }

      }
      System.out.println();
 }
}
7.打印如下图形:
*****
 ***
  *
public class Practise4 {
public static void main(String[] args) {
     for(int i = 0;i<3;i++){
          for(int k = 0;k<i;k++){
               System.out.print(" ");
          }
          for(int j = 5;j>=i*2+1;j--){
               System.out.print("*");
          }
          System.out.println();
     }
}
8.打印如下图形:
*****
 * *
  *
  
public class Practise4 {
public static void main(String[] args) {
     for(int i = 0;i<3;i++){
          for(int k = 0;k<i;k++){
               System.out.print(" ");
          }
          for(int j = 5;j>=i*2+1;j--){
               if(i==0 || i==2 || j==5 || j==i*2+1){
                    System.out.print("*");
               }else{
                    System.out.print(" ");
               }
          }
          System.out.println();
     }	  
}

打印九九乘法表

在这里插入图片描述

public class Practise4 {
public static void main(String[] args) {
for(int i = 1;i<=9;i++){
     for(int j = 1;j<=i;j++){
          System.out.print(j + "x" + i + "=" + (i*j) + "\t");
     }
     System.out.println();
}     
}

while循环

while循环的使用和for基本一致,需要深入的同学可以将上面练习的代码改写成while循环语句。

语法

while(条件){
	循环体;
}

只要条件成立,就执行一次循环体。知道条件不成立
public class Demo1 {
    public static void main(String[] args) {
        /*
        打印1~3的所有整数
         */
        int i = 1;
        /*
        进入while语法:
        第一次循环:  i = 1   条件成立   执行循环体(将i变为2)
        第二次循环:  i = 2   条件成立   执行循环体(将i变为3)
        第三次循环:  i = 3   条件成立   执行循环体(将i变为4)
        第四次循环:  i = 4   条件不成立成立   结束循环
         */
        while (i<=3){
            System.out.println(i);
            i++;
        }
    }
}

案例:我有个梦想,每月存3000,每年递增1000元,多少个月后存满20万

public class Demo1 {
public static void main(String[] args) {
     int money = 3000;
     int allMoney = 0;
     int month = 0;
     while(allMoney < 200000){
          allMoney+=money;
          month++;
          if(month % 12 == 0){
               money+=1000;
          }
     }

     System.out.println(month + "个月以后存满20万  " + money);
}

do-while循环

do{
   代码块; 
}while(条件);

先执行代码块,再判断条件。  条件成立,继续循环。   条件不成立,循环结束
特点:代码块至少会执行一次

**案例:**珠穆朗玛峰高8848米,现在有一张无限大的纸,厚0.01米,问这张纸对折多少次能达到珠穆朗玛峰的高度?分别使用for循环与while循环来解。

public class Practise1 {
    public static void main(String[] args) {
        //使用for循环
        int count = 0;
        for(double ply = 0.01; ply < 8848; ply *= 2){
            count++;
        }
        System.out.println("需要对折" + count + "次");

        //使用while循环
        double ply = 0.01;
        int count2 = 0;
        while(ply < 8848){
            count2++;
            ply *= 2;
        }
        System.out.println("需要对折" + count + "次");
    }
}

三大循环的区别及应用场景

  • 语法结构的区别:
    for(初始化变量;判断条件;更新变量){}
    while(判断条件){ }
    do{ }while(判断条件);

  • **循环共同点:**判断条件的结果都是boolean值,true-循环 false-跳出循环

  • 执行顺序的区别:
    for:先判断,再执行
    while:先判断,再执行
    do-while:先执行一遍,再判断

  • 各自使用场景:

    循环次数确定:for
    循环次数不确定,先判断,再执行:while
    循环次数不确定,先执行一遍,再判断:do-while

循环中的关键字

  • break:结束当前循环

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

public class Practise1 {
    public static void main(String[] args) {
    		Scanner scan = new Scanner(System.in);
         double sum = 0;
         boolean flag = true;//true-5次正常录入	false-有输入负数的情况
         for(int i = 1;i<=5;i++){
              System.out.println("请输入第" + i + "门成绩:");
              double score = scan.nextDouble();
              if(score < 0){
                   flag = false;
                   break;
              }
              sum+=score;
         }
         if(flag){
              double avg = sum/5;
              System.out.println("平均分为:" + avg);
         }else{
              System.out.println("分数为负数,停止录入");
         }  
    } 
}
  • continue:结束本次循环,并立即开始下一次循环

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

    public class Practise1 {
        public static void main(String[] args) {
      		Scanner scan = new Scanner(System.in);
             int num = 0;//记录成绩大于等于80分学生的人数
             for(int i = 1;i<=5;i++){
                  System.out.println("请输入第" + i + "名学生的成绩:");
                  double score = scan.nextDouble();
                  if(score < 80){
                       continue;
                  }
                  num++;
             }
             System.out.println("分数大于等于80分的学生比例为:" + (num/5.0*100) + "%");  	}	
    }
    
  • return:结束当前方法

    public class ReturnDemo {
        public static void main(String[] args) {
            for (int i = 0; i < 4; i++) {
                if(i == 2){//在打印第三行之前 使用return结束了当前方法(就是main方法)
                    return;
                }
                for (int j = 0; j < 4; j++) {
                    System.out.print(""+i+j+" ");
                }
                System.out.println();
            }
            System.out.println("所有的循环都结束了....");
        }
    }
    
  • lable:循环的标签

  public class Test06{
  	
	public static void main(String[] args){
  		/**
			知识点:lable的运用
  			
  			需求:嵌套for循环,外层循环5次,内层循环3次,
  			外层循环到第3次时,在内层循环中退出外层循环
  		*/
  		
  		flag:for(int i = 1;i<=5;i++){
  			for(int j = 1;j<=3;j++){
  				System.out.println(i + " -- " + j);
  				if(i == 3){
  					break flag;
  				}
  			}
  		}
  		
  	}
  }

注意事项

return:可以写在任何一个方法中

break与continue,在嵌套循环中,只能结束当前的那一层循环

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值