21_循环结构

21_循环结构

循环结构的概念

  • 在Java程序中若希望重复执行一段代码时,就需要使用循环结构。

  • 任何复杂的程序逻辑都可以通过顺序、分支、循环三种程序结构实现。------------>程序员的基本功

    在这里插入图片描述

for 循环

  • for(初始化表达式; 条件表达式/临界值; 修改初始值表达式) {
    	循环体;
    }
    
  • for 循环结构是我们用的最多的一种

  • 在这里插入图片描述

  • 执行流程:执行初始化表达式=>判断条件表达式是否成立

    • =>成立则执行循环体=>修改初始值表达式=>判断条件是否成立
    • =>若不成立,则循环结束
    /*
    	编程实现 for 循环的使用,模拟玩游戏过程
     */
     import java.util.Scanner;
     
     public class ForTest {
    	 
    	 public static void main(String[] args) throws InterruptedException {
    		 
    		 for (int i = 1; i <= 10; i ++) { // i = i + 1 => i += 1 => i++
    			 
    			 System.out.println("今晚吃鸡,大吉大利,正在进行第" + i + "场游戏...");
    			 Thread.sleep(5000); // 模拟睡眠5秒的效果
    			 System.out.println("本场游戏结束!\n\n\n");
    		 }
    		 
    		 System.out.println("该休息了,否则明天早上就要迟到了!");
    	 }
     }
    

案例:for循环打印奇数

使用for循环打印 1 ~ 100 的所有奇数,使用三种方式

/*
	编程使用for循环打印 1 ~ 100 的所有奇数
 */
 import java.util.Scanner;
 
 public class ForNumTest {
	 
	 public static void main(String[] args) throws InterruptedException {
		 
		 // 1、使用for循环打印 1 ~ 100 之间的所有奇数
		 // 方式一:根据奇数概念进行打印
		 for (int i = 1; i <= 100; i ++) { 
			 
			 // System.out.println("i = " + i);
			 // 若当前i的数值是奇数时则打印,否则不打印	奇数是不能被2整除的数	也就是对2取余的结果不等于0
			 // if(i % 2 == 1) {
			 if(i % 2 != 0) {
				 
				 System.out.println("i = " + i);
			 }
		 }
		 
		 System.out.println("--------------------------------------");
		 // 方式二:根据等差数列的概念来打印	每两个数据之间相差2
		 for(int i =1; i <= 100; i += 2) {
			 System.out.println("i = " + i);
		 }
		 
		 System.out.println("--------------------------------------");
		 // 方式三:根据通项公式的规则来打印	2*i-1
		 for(int i = 1; i <= 50; i ++) { // 因为2i = 100, 所以 i <= 50
			 System.out.println("i = " + (2 * i - 1));
		 }
	 }
 }

案例:for循环实现累加和

使用for循环实现累加:1+2+…+10000=?最后打印出来

/*
	编程使用for循环实现 1~ 10000 之间所有整数的累加和
 */
 import java.util.Scanner;
 
 public class ForSumTest {
	 
	 public static void main(String[] args) throws InterruptedException {
		 
		 // 1、使用for循环实现 1~ 10000 之间所有整数的累加
		 int sum = 0; // 声明变量用来记录累加的结果
		 
		 for(int i = 1; i <= 10000; i ++) { 
		 
			 // 将所有i的取值都累加到变量sun中
			 sum += i; // sum = sum + i;
		 }
		 
		 // 2、打印最终的累加和
		 System.out.println("从 1 ~ 10000 的累加和是:" + sum);
	 }
 }

案例:for循环实现水仙花数的打印

  • 使用for循环打印三位数中所有水仙花数。

  • 所谓"水仙花数"即一个整数满足其值等于各个数位的立方和。

  • 如:153是一个水仙花数,因为 153 = 1^3 + 5^3 + 3^3。

    /*
    	编程使用for循环打印三位数中所有水仙花数
     */
     import java.util.Scanner;
     
     public class ForWaterTest {
    	 
    	 public static void main(String[] args) {
    		 
    		 // 1、使用for循环打印所有的三位数
    		 
    		 for(int i = 100; i <= 999; i ++) { 
    		 
    			 // 2、拆分三位数中的各个数位上的数字
    			 // 123 / 100 = 1;		123 % 100 => 23 / 10 = 2;		123 % 10 = 3;
    			 int ia = i / 100; // 拆分百位数
    			 int ib = i % 100 / 10; // 拆分十位数
    			 int ic = i % 10; // 拆分个位数
    		 
    			 // 3、针对每个三位数都要判断该数是否为水仙花数,若是则打印,否则不打印
    			 // 判断该数是否等于各个数位的立方和
    			 if((ia*ia*ia + ib*ib*ib + ic*ic*ic) == i) {
    				System.out.println("i = " + i);// i = 153	i = 370		i = 371		i = 407
    			 }
    		 }
    	 }
     }
    

continue 关键字

  • continue (在英文中表示继续的意思)语句用在循环体中,用于提前结束本次循环而开始下一次循环。
  • 当我们提前结束本次循环,开始继续下次循环就使用 continue

案例

使用for循环打印1 ~ 20之间的所有有数,若遇到5的倍数则跳过不打印

/*
	编程实现 continue 关键字的使用
 */
 import java.util.Scanner;
 
 public class ForContinueTest {
	 
	 public static void main(String[] args) {
		 
		 // 1、使用 for 循环打印 1 ~ 20 之间,除 5 的倍数之外的所有整数
		 for(int i =1; i <= 20; i++) { // for(初始值; 临界值; )
			 // 若遇到5的倍数则跳过不打印,转而继续打印下一个数
			 if(0 == i % 5) { // 把0放在前面是一个良好的编程习惯,可以帮我们避免一些不必要大的麻烦
				 continue;	// 表示提前结束本次循环,继续下一次循环,也就是本想了i++, 从i++继续执行
			 }
			 System.out.println("i = " + i);
		 }
	 }
 }

break 关键字

  • break 用于退出当前语句块,break 用在循环体中用于退出循环。continue的关键在于提前结束本次循环,还要进行下次循环,break 关键字的价值在于直接跳出本次循环,把整个循环都结束了。
  • for(;; ) - 这种没有循环条件的循环叫做 无限循环,俗称“死循环”,break经常和死循环搭配使用,死循环就是没有循环条件的循环,没有限制。

案例

不断地提示用户输入聊天内容并输出,知道用户输入“bye”结束聊天。

/*
	编程使用 for 循环和 break 关键字来模拟聊天的过程
 */
 import java.util.Scanner;
 
 public class ForBreakTest {
	 
	 public static void main(String[] args) {
		 
		 // 5、声明一个boolean类型的变量作为发送放的标志
		 boolean flag = true;
		 Scanner sc = new Scanner(System.in);
		 
		 // 4、使用无限循环来模拟不断地聊天
		 for(;;) {
			 // 1、提示用户输入要发送的聊天内容并使用变量记录
			 System.out.println("请" + (flag?"张三":"李四") +"要发送的聊天内容");
			 String str = sc.next();
			 
			 // 2、判断用户输入的内容是否为"bye",若是则聊天结束
			 // 按tab键缩进,按住shift-tab回来
			 if("bye".equals(str)) {
				 System.out.println("聊天结束");
				 break; // 用于跳出当前循环
			 }
			 // 3、若不是则打印用户输入的聊天内容
			 //else {
				 //System.out.println("聊天内容是:" + str);
			 //}
			 System.out.println((flag?"张三说:":"李四说:") + str + "\n\n\n");
			 flag = !flag; // 逻辑非,取反
		 }
		 // ...
		 // 网络编程学完就能实现真正的聊天功能了。
	 }
 }

案例:猜数字游戏

  • 猜数字游戏

  • 随机生成数字n(1-100),等待用户输入猜测数据,根据用户的输入比较输出猜大了,猜小了,猜对了,如果用户猜对了就结束游戏

  • 猜数字游戏的框架实现

    /*
    	编程使用for循环实现猜数字游戏
    	使用java. lang包下的所有类,都不需要手动导入。
     */
     import java.util.Scanner;
     import java.util.Random;
     
     public class ForGuessTest {
    	 
    	 public static void main(String[] args) {
             // 这只有一次猜测机会
    		 
    		 // 1、随机生成 1 ~ 100 之间的整数并使用变量记录
    		 Random ra = new Random();
    		 int temp = ra.nextInt(100) + 1; // () 中填100的时候表示生成一个 0 ~ 99 之间的随机数。相当于拿着一个很大的样本数据对100取余,无论什么数据对100取余都是0~99
    		 // System.out.println("temp:" + temp);
    		 
    		 // 2、提示用户输入 1 ~ 100 之间猜测的整数并使用变量记录
    		 System.out.println("请输入 1 ~ 100 之间猜测的整数:");
    		 Scanner sc = new Scanner(System.in);
    		 int num = sc.nextInt();
    		 
    		 // 3、使用用户输入的整数与随机数之间比较大小并给出对应的提示
    		 if(num > temp) {
    			 System.out.println("猜大了,再小一点吧!");
    		 } else if(num < temp) {
    			 System.out.println("猜小了,再大一点吧!");
    		 } else {
    			 System.out.println("恭喜您猜对了,游戏结束!");
    		 }
    	 }
     }
    
  • 猜数字游戏的完整实现

    /*
    	编程使用for循环实现猜数字游戏
    	使用java. lang包下的所有类,都不需要手动导入。
     */
     import java.util.Scanner;
     import java.util.Random;
     
     public class ForGuessTest {
    	 
    	 public static void main(String[] args) {
    		 
    		 // 1、随机生成 1 ~ 100 之间的整数并使用变量记录
    		 Random ra = new Random();
    		 int temp = ra.nextInt(100) + 1; // () 中填100的时候表示生成一个 0 ~ 99 之间的随机数。相当于拿着一个很大的样本数据对100取余,无论什么数据对100取余都是0~99
    		 // System.out.println("temp:" + temp);
    		 // 4、声明一个int类型的变量来统计用户猜测的次数
    		 int cnt = 0;
    		 for(;;) {
    			 // 2、提示用户输入 1 ~ 100 之间猜测的整数并使用变量记录
    			 System.out.println("请输入 1 ~ 100 之间猜测的整数:");
    			 Scanner sc = new Scanner(System.in);
    			 int num = sc.nextInt();
    			 cnt++;
    			 
    			 // 3、使用用户输入的整数与随机数之间比较大小并给出对应的提示
    			 if(num > temp) {
    				 System.out.println("猜大了,再小一点吧!");
    			 } else if(num < temp) {
    				 System.out.println("猜小了,再大一点吧!");
    			 } else {
    				 System.out.println("恭喜您猜对了,游戏结束!");
    				 break;
    			 }
    		 }
    		 
    		 if(1 == cnt) {
    			 System.out.println("你果然是大咖!");
    		 } else if(cnt <= 6) {
    			 System.out.println("水平不错,继续加油哦!");
    		 } else {
    			 System.out.println("你还可以多玩几次游戏!");
    		 }
    	 }
     }
    

双重for循环的格式

  • 双层for循环

    /*
    	编程实现双重for循环的使用
     */
     public class ForForTest {
    	 
    	 public static void main(String[] args) {
    		 
    		 // 1、使用for循环打印5行字符串打印内容"厉害了我的哥!"
    		 for(int i = 0; i < 5; i ++) {
    			 System.out.println("厉害了我的哥!");
    		 }
    		 
    		 System.out.println("----------------------------------------------------");
    		 // 2、使用for循环打印5列字符串内容"厉害了我的哥!"
    		 for(int j = 0; j < 5; j ++) {
    			 System.out.print("厉害了我的哥!");
    		 }
    		 
    		 System.out.println();
    		 
    		 System.out.println("----------------------------------------------------");
    		 // 3、使用for循环打印5行5列字符串内容"厉害了我的哥!"
    		 // 外层循环主要用于控制打印的行数
    		 for(int i = 0; i < 5; i ++) {
    			 // 内层循环主要用于控制打印的列数
    			 for(int j = 0; j < 5; j ++) {
    				 System.out.print("厉害我的佘大儿!");
    			 }
    			 System.out.println();
    		 }
    		 
    		 /*
    			 厉害我的佘大儿!厉害我的佘大儿!厉害我的佘大儿!厉害我的佘大儿!厉害我的佘大儿!
    			 厉害我的佘大儿!厉害我的佘大儿!厉害我的佘大儿!厉害我的佘大儿!厉害我的佘大儿!
    			 厉害我的佘大儿!厉害我的佘大儿!厉害我的佘大儿!厉害我的佘大儿!厉害我的佘大儿!
    			 厉害我的佘大儿!厉害我的佘大儿!厉害我的佘大儿!厉害我的佘大儿!厉害我的佘大儿!
    		     厉害我的佘大儿!厉害我的佘大儿!厉害我的佘大儿!厉害我的佘大儿!厉害我的佘大儿!
    		 */
    ;	 }
     }

双重for循环的执行流程和特点

  • for(初始化表达式1:条件表达式2:修改初始值表达式3) {
    	for(初始化表达式4:条件表达式5:修改初始值表达式6) {
    		循环体;
    	}
    }
    
    // 冒泡排序
    // 方式一:
    int[] {2,3,1}
    for(i=0;i<n-1;i++){
        for(j=0;j<n-i-1;j++)
            //j和j+1项比较
    }
    
    // 方式二:
    for(i=1;i<n;i++){
        for(j=0;j<n-i;j++)
            //j和j+1项比较
    } 
    
    // 方式三:
    for (int i = 1; i < n; i++)   {  
        for (int j = n - 1; j >= i; j--)  
            //  j-1和j项比较 
    } 
    
    // 示例:
    for(int i =0;i < score.length - 1;i++)  
    {  
        for(int j = (score.length - 2);j >= i;j--)  
        {  
            if(score[j] < score[j+1])  
            {  
                int temp = score[j];  
                score[j] = score[j+1];  
                score[j+1] = temp;  
            }  
        }  
    }  
    
    // 示例2:
    for(int i =0;i < score.length - 1;i++)  
    {  
        for(int j = 0;j <  score.length - 1-i;j++)// j开始等于0,  
        {  
            if(score[j] < score[j+1])  
            {  
                int temp = score[j];  
                score[j] = score[j+1];  
                score[j+1] = temp;  
            }  
        }  
    }  
    
  • 执行流程:执行表达式1 => 判断表达式2是否成立

    • => 若成立,则执行表达式4 => 判断表达式5是否成立
      • => 若成立,则执行循环体 => 执行表达式6 => 表达式5是否成立
      • => 若不成立,则内层循环结束 => 表达式3 => 表达式2是否成立
    • => 若不成立,则外层循环结束
  • 外层循环用于控制打印的行数,内层循环用于控制打印的列数,外层循环改一下,内层循环从头到尾跑一圈。

  • 在以后的开发中若需要打印多行多列时,需要使用双重循环。

  • 多重循环不易嵌套太多层,否则效率很低。一般到三重循环即可,最常见的就是双重循环。极大时候,我们还是使用单层循环解决一些问题。

案例:各种星星图案的打印

在这里插入图片描述

第六个星星图案的规律在这里插入图片描述

/*
	编程使用双重for循环打印星星图案
 */
 import java.util.Scanner;
 
 public class ForForStarTest {
	 
	 public static void main(String[] args) {
		 
		 // 1、打印第一个星星图案
		 // 外层循环主要用于控制打印的行数
		 for(int i = 1; i <= 5; i ++) {
			 // 内层循环主要用于控制打印的列数
			 for(int j = 1; j <= 5; j ++) {
				 System.out.print("*");
			 }
			 System.out.println();
		 }
		 
		 System.out.println("----------------------------------------------------");
		 // 2、打印第二个星星图案
		 for(int i = 1; i <= 5; i ++) {
			 // 也就是当前行的列数与当前行的行数是相等关系
			 for(int j = 1; j <= i; j ++) {
				 System.out.print("*");
			 }
			 System.out.println();
		 }
		 
		 System.out.println("----------------------------------------------------");
		 // 3、打印第三个星星图案
		 for(int i = 1; i <= 5; i ++) {
			 // 也就是当前行的列数与当前行的行数相加为6的关系
			 for(int j = 1; j <= 6 - i; j ++) {
				 System.out.print("*");
			 }
			 System.out.println();
		 }
		 
		 System.out.println("----------------------------------------------------");
		 // 4、打印第四个星星图案
		 for(int i = 1; i <= 5; i ++) {
			 // 也就是当前行的列数与当前行的行数为5-i的关系-----------------空格
			 for(int j = 1; j <= 5-i; j ++) {
				 System.out.print(" ");
			 }
			 // 也就是当前行的列数与当前行的行数为2*i-1的关系----------------星号
			 for(int j = 1; j <= 2 * i - 1; j ++) {
				 System.out.print("*");
			 }
			 System.out.println();
		 }
		 
		 
		 System.out.println("----------------------------------------------------");
		 // 5、打印第五个星星图案
		 for(int i = 1; i <= 5; i ++) {
			 // 也就是当前行的列数与当前行的行数为5-i的关系-----------------空格
			 for(int j = 1; j <= 5-i; j ++) {
				 System.out.print(" ");
			 }
			 // 也就是当前行的列数与当前行的行数为2*i-1的关系----------------星号
			 for(int j = 1; j <= 2 * i - 1; j ++) {
				 System.out.print("*");
			 }
			 System.out.println();
		 }
		 for(int i = 1; i <= 4; i ++) {
			 // 也就是当前行的列数与当前行的行数为相等的关系-----------------空格
			 for(int j = 1; j <= i; j ++) {
				 System.out.print(" ");
			 }
			 // 也就是当前行的列数与当前行的行数为-2 * i + 7( 8-(2 * i - 1))的关系----------------星号
			 for(int j = 1; j <= 8-(2 * i - 1); j ++) {
				 System.out.print("*");
			 }
			 System.out.println();
		 }
		 
		 System.out.println("----------------------------------------------------");
		 // 6、打印第六个星星图案-------------动态生成菱形
		 Scanner sc = new Scanner(System.in);
         int rows = sc.nextInt();
         for (int row = 1;row<=2*rows-1;row++){
             for (int col = 1;col<=Math.abs(rows-row);col++){
                 System.out.print(" ");
             }
             for (int col = 1;col<=2*rows-1-2*Math.abs(rows-row);col++){
                 System.out.print("*");
             }
             System.out.println();
         }
	 }
 }

案例:九九乘法表的打印

在这里插入图片描述

在这里插入图片描述

/*
	编程使用双重for循环打印九九乘法表
 */
 import java.util.Scanner;
 
 public class ForForTableTest {
	 
	 public static void main(String[] args) {
		 
		 // 打印第九九乘法表
		 // 1、使用外层for循环控制打印的行数,一共9行
		 outer:for(int i = 1; i <= 9; i ++) {
			 
			 // 也就是当前行的列数与当前行的行数是相等关系
			 // 2、使用内层for循环控制打印的列数,最多9行
			 for(int j = 1; j <= i; j ++) {
				 
				 if(j == 3 && (i == 3 || i == 4)) {
					 System.out.print(" ");
				 }
				
				 // 3、使用两个循环变量来拼接等式
				 System.out.print(j + "*" + i + "=" + j*i + "  ");
				 // 4、新的需求:当打印完毕6*6 = 36后结束整个打印
				 if(6 == j) {
					 // i = 10;
					 // break; // 主要用于跳出循环,但该关键字只能跳出当前所在的循环
					 break outer; // 表示可以跳出外层for循环 , break 的大跳在日常代码中用的还是比较少的,但是用到的时候还是要知道
				 }
			 }
			 /* if(6 == i) {
				 break;
			 }*/
			 System.out.println();
		 }
		 
	 }
 }

案例:素数打印的实现

  • 使用双重 for 循环打印 2 ~ 100 之间的所有素数。

  • 当一个数只能被 1 和它本身整除时,这个数就叫做素数或质数。

    /*
    	编程使用双重for循环打印 2 ~ 100 之间的素数
     */
     public class ForForPrimeTest {
    	 
    	 public static void main(String[] args) {
    		 
    		 
    		 // 1、使用for循环打印2 ~ 100之间的所有整数
    		 for(int i = 2; i <= 100; i ++) {
    			 
    			 // 3、声明一个boolean类型的变量作为是否是素数的标记
    			 boolean flag = true;
    			 
    			 // System.out.println("i = " + i);
    			 // 2、针对每一个当前的整数都要判断是否为素数,若是素数则打印,否则不打印
    			 // 判断一个数是否为素数的方法是:若该数不能被2到它本身-1之间的所有素数整除时,则证明该数是素数
    			 // 使用for循环用于控制2到该数自身-1之间的范围
    			 for(int j = 2; j < i; j ++) {
    				 // 使用当前数除以该循环中的每个数据并判断是否可以整除,只要找到一个可以整除的数据,则证明该数不是素数
    				 if(0 == i % j) {
    					 flag = false;
    					 break; // 跳出当前所在的内层循环,也就是不需要再继续除以下一个整数
    				 }
    			 }
    			 // 只可以打印素数
    			 if(flag) {
    				 
    				 System.out.println("i = " + i);
    			 }
    		 }
    	 }
     }
    

案例:素数打印的优化-----------------------------> 算到平方根就可,面试官想知道的也是你是否知道这个理念

// for(int j = 2; j < i; j ++) {
			 // 只需要判断2到该数的平方根即可,因为随着除数的增大商必然减小,会造成重复的判断。
			 for(int j = 2; j <= Math.sqrt(i); j ++) { // 加平方根的好处在于:判断一个数不是素数的时候少做一些整除的运算,大大提高了我们的效率
				 // 使用当前数除以该循环中的每个数据并判断是否可以整除,只要找到一个可以整除的数据,则证明该数不是素数			
                  // Math.sqrt(x) 求x的平方根
				 if(0 == i % j) {
					 flag = false;
					 break; // 跳出当前所在的内层循环,也就是不需要再继续除以下一个整数
				 }
			 }
			 // 只可以打印素数
			 if(flag) {
				 
				 System.out.println("i = " + i);
			 }

while 循环

  • 语法格式:
    while(条件表达式) {
    	循环体;
    }
    

    在这里插入图片描述

  • 判断条件表达式是否成立

    • => 若成立,则执行循环体 => 判断条件表达式是否成立
    • => 若不成立,则循环结束
    /*
    	编程实现while循环的使用
     */
     public class WhileTest {
    	 
    	 public static void main(String[] args) {
    		 
    		 // 1、使用for循环打印 1 ~ 10 之间的所有整数
    		 // 在() 或 {} 中声明的变量叫做块变量,作用范围是从声明开始一直到语句块结束
    		 for(int i = 1; i <= 10; i ++) {
    			 
    			 System.out.println("i = " + i);
    		 }
    		 
    		 System.out.println("-------------------------------------");
    		 // 2、使用while循环打印 1 ~ 10 之间的所有整数
    		 int i = 1;
    		 while(i <= 10) {
    			 System.out.println("i = " + i);
    			 i ++;
    		 }
    	 }
     }
    

案例:while循环实现调和数列的累加和

使用 while 循环计算调和数列的和并打印,即:1/1 + 1/2 + … + 1/n。

/*
	编程使用while循环实现调和数列的累加和并打印
 */
 import java.util.Scanner;
 
 public class WhileSumTest {
	 
	 public static void main(String[] args) {
		 
		 // 1、提示用户输入一个整数并使用变量记录
		 System.out.println("请输入一个整数:");
		 Scanner sc = new Scanner(System.in);
		 int num = sc.nextInt();
		 
		 // 2、使用while循环计算调和数列的和并使用变量记录
		 double sum = 0.0;
          /*
          	for(int i = 1; i<= num; i++) {
          		sum += 1.0/i;
          	}
           */
		 int i = 1;
		 while(i <= num) {
			 sum += 1.0/i; // 1.0 就是为了Java中两个整数相除返回一个浮点数
			 i ++;
		 }
		 
		 // 3、打印最终的计算结果
		 System.out.println("sum = " + sum);
	 }
 }

while 循环和 for 循环的比较

  • while 循环和 for循环完全可以互换,当然推荐使用 for 循环。
  • while 循环更适合于明确循环条件但不明确循环次数的场合中。
  • for 循环更适合于明确循环次数或范围的场合中。
  • while(true) 等价于 for(;😉 都表示无限循环。永远为真,就永远执行下去。

案例:while 循环实现反向输出

提示用户输入一个任意位数的正整数然后反向输出。

如果明确用户输入的是几位数,可以使用水仙花数的方式来做这题。

这一题应该从个位开始拆分,即从后向前拆。不明确循环次数,但是判断条件就是/10=0的时候。

在这里插入图片描述

/*
	编程使用while循环实现任意正整数的反向输出
 */
 import java.util.Scanner;
 
 public class WhileReverseTest {
	 
	 public static void main(String[] args) {
		 
		 // 1、提示用户输入一个正整数并使用变量记录
		 System.out.println("请输入一个任意位数的正整数:");
		 Scanner sc = new Scanner(System.in);
		 int num = sc.nextInt();
		 
		 // 2、使用while循环进行拆分并打印
		 // while(num > 0) {
			 // System.out.print(num % 10); // 拆分个位数
			 // num /= 10; // 丢弃个位数
		 // }
		 // 2、使用while循环进行拆分整数中的每个数字再记录到变量中
		 int res = 0;
		 int temp = num; // 指定变量作为num的替身	目的:保证原始数据的值不会发生改变,为了不破坏原始数据,在开发中有时会需要保留原始数据
		 while(temp > 0) {
			 res = res * 10 + temp % 10; // 3		32		321
			 num /= 10;					 // 12		1		0
		 }
		 
		 // 3、打印逆序后的结果
		 System.out.println(num + "逆序后的结果是:" + res);
	 }
 }

do while 循环(熟悉)

  • do是做,while是当,当条件成立我们再去做这件事。首先是做,然后再去判断条件是否成立。

  • 语法格式:
    do {
    	循环体;
    } while(条件表达式);
    
  • 在这里插入图片描述

  • 执行流程: 执行循环体 => 判断条件表达式是否成立

    • => 若成立,则执行循环体 => 判断条件表达式是否成立
    • => 若不成立,则循环结束
  • 与while循环的区别:while循环上来先判断条件是否成立,然后再判断条件是否成立,现在反过来了执行完循环体之后再判断条件表达式是否成立。

  • do-while 循环主要用于至少执行一次循环体的场合中。

    /*
    	编程实现 do	while 循环的使用
     */
     public class DoWhileTest {
    	 
    	 public static void main(String[] args) {
    		 
    		 // 1、使用for循环打印 1 ~ 10 之间的所有整数
    		 // 在() 或 {} 中声明的变量叫做块变量,作用范围是从声明开始一直到语句块结束
    		 for(int i = 1; i <= 10; i ++) {
    			 
    			 System.out.println("i = " + i);
    		 }
    		 
    		 System.out.println("-------------------------------------");
    		 // 2、使用while循环打印 1 ~ 10 之间的所有整数
    		 int i = 1; // 局部变量,作用范围:从声明开始一直到方法结束
    		 while(i <= 10) {
    			 System.out.println("i = " + i);
    			 i ++;
    		 }
    		 
    		 System.out.println("-------------------------------------");
    		 // 3、使用do while 循环打印 1 ~ 10 之间的所有整数
    		 // while 循环 和 do while 循环的区别:do while循环至少执行一次循环体
    		 i = 1;
    		 do {
    			 System.out.println("i = " + i);
    			 i ++;
    		 } while(i <= 10);
    	 }
     }
    

案例:do while 循环模拟任务检查

  • 使用 do while 循环来模拟学习任务是否合格的检查,如果合格则停止,否则就重新完成学习任务。--------至少得检查一次

    /*
    	使用 do	while 循环来模拟学习效果的检查
     */
     import java.util.Scanner;
     
     public class DoWhileCheckTest {
    	 
    	 public static void main(String[] args) throws Exception {
    		 
    		 String msg = null; // 像String这种非基本数据类型的数据的时候,我们不知道要给它一个什么样的初始值,我们可以给它赋值为空
    		 do {
    			 System.out.println("正在疯狂学习中...");
    			 Thread.sleep(5000); // 模拟5秒钟
    			 System.out.println("是否合格?(y/n)");
    			 Scanner sc = new Scanner(System.in);
    			 msg = sc.next();
    		 } while(!"y".equals(msg));
    	 }
     }
    

循环的常见笔试考点

// 循环常见笔试考点
		 // 典故:十动然拒
		 int i = 1;
		 // 考点:while后的()后加一个;会不会有问题?
		 // 笔试考点:有没有分号
		 // while(i <= 10000);  相当于下面代码
		 while(i <= 10000) {
			 ; // 空语句,啥也不干,可以用于延时;这相当于变成了一个无限循环了
		 }
		 {
			 System.out.println("I Love You !");
			 i ++;
		 }
	 }

案例:do while 循环模拟任务检查

  • 使用 do while 循环来模拟学习任务是否合格的检查,如果合格则停止,否则就重新完成学习任务。--------至少得检查一次

    /*
    	使用 do	while 循环来模拟学习效果的检查
     */
     import java.util.Scanner;
     
     public class DoWhileCheckTest {
    	 
    	 public static void main(String[] args) throws Exception {
    		 
    		 String msg = null; // 像String这种非基本数据类型的数据的时候,我们不知道要给它一个什么样的初始值,我们可以给它赋值为空
    		 do {
    			 System.out.println("正在疯狂学习中...");
    			 Thread.sleep(5000); // 模拟5秒钟
    			 System.out.println("是否合格?(y/n)");
    			 Scanner sc = new Scanner(System.in);
    			 msg = sc.next();
    		 } while(!"y".equals(msg));
    	 }
     }
    

循环的常见笔试考点

// 循环常见笔试考点
		 // 典故:十动然拒
		 int i = 1;
		 // 考点:while后的()后加一个;会不会有问题?
		 // 笔试考点:有没有分号
		 // while(i <= 10000);  相当于下面代码
		 while(i <= 10000) {
			 ; // 空语句,啥也不干,可以用于延时;这相当于变成了一个无限循环了
		 }
		 {
			 System.out.println("I Love You !");
			 i ++;
		 }
	 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值