Java基础语法03-循环

Java基础语法3

1 循环语句

循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去,形成死循环。

2 for循环

2.1 for循环语法

for(初始化表达式①; 布尔表达式②; 步进表达式④){ 
    循环体③ 
}

2.2 执行流程

  • 执行顺序:①②③④>②③④>②③④…②不满足为止。

  • ①负责完成循环变量初始化

  • ②负责判断是否满足循环条件,不满足则跳出循环

  • ③具体执行的语句

  • ④循环后,循环条件所涉及变量的变化情况

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AIVVbwiW-1605359434408)(./images/for.png)]

示例1

public static void main(String[] args) { 
    //控制台输出10次HelloWorld,不使用循环 	
    System.out.println("HelloWorld"); 
    System.out.println("HelloWorld"); 
    System.out.println("HelloWorld");
    System.out.println("HelloWorld"); 	
    System.out.println("HelloWorld"); 
    System.out.println("HelloWorld"); 
    System.out.println("HelloWorld"); 
    System.out.println("HelloWorld"); 
    System.out.println("HelloWorld"); 
    System.out.println("HelloWorld"); 
    System.out.println("‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐"); 
    //用循环改进,循环10次 
    //定义变量从0开始,循环条件为<10 
    for(int x = 10; x > 0; x-- ) { 
        System.out.println("HelloWorld"+x); 
    } 
}

示例2

public static void main(String[] args) { 
    // 使用循环,计算1-100之间的偶数和
    //1.定义一个初始化变量,记录累加求和,初始值为0 
    int sum = 0; 
    //2.利用for循环获取1‐100之间的数字 
    for (int i = 1; i <= 100; i++) { 
        //3.判断获取的数组是奇数还是偶数 
        if(i % 2==0){ 
            //4.如果是偶数就累加求和 
            sum += i; 
        } 
    } 
    //5.循环结束之后,打印累加结果 
    System.out.println("sum:"+sum); 
}

课堂练习1:

题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
比如:1220的最大公约数是4,最小公倍数是60。
说明:break关键字的使用

课堂练习2:

打印1~100之间所有奇数的和及个数

课堂练习3:

打印1~100之间所有是7的倍数的整数的个数及总和(体会设置计数器的思想)
            int n=0,sum=0;
        for (int i=1;i<100;i++){
            if (i%7==0){
                n+=1;
                sum+=i;
            }
        }
        System.out.println("次数:"+n+"总和"+sum);

课堂练习4:

输出所有的水仙花数,所谓水仙花数是指一个3位数,其各个位上数字立方和等于其本身。
例如: 153 = 1*1*1 + 3*3*3 + 5*5*5

3 while循环

3.1 语法格式

初始化表达式① 
while(布尔表达式②){ 
    循环体③ 
    步进表达式④ 
}

3.2 执行流程

  • 执行顺序:①②③④>②③④>②③④…②不满足为止。

  • ①负责完成循环变量初始化。

  • ②负责判断是否满足循环条件,不满足则跳出循环。

  • ③具体执行的语句。

  • ④循环后,循环变量的变化情况。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mmkQy5p4-1605359434409)(\assets\while.png)]

示例代码1

public static void main(String[] args) { 
    //while循环实现打印10次HelloWorld 
    //定义初始化变量 
    int i = 10; 
    //循环条件<=10 
    while(i>0){ 
        System.out.println("HelloWorld"); 
        //步进 
        i--; 
    } 
}

示例代码2

public static void main(String[] args) { 
    //使用while循环实现 
    //定义一个变量,记录累加求和 
    int sum = 0; 
    //定义初始化表达式 
    int i = 1; 
    //使用while循环让初始化表达式的值变化 
    while(i<=100){ 
        //累加求和 
        sum += i ; 
        //步进表达式改变变量的值 
        i++;
    }
    //打印求和的变量 
    System.out.println("1‐100的和是:"+sum); 
}

课堂练习:

while循环求100以内基数的和与偶数的和
        int i=0,odd=0,even=0;
        while (i<100){
            if (i%2==0){
                even+=i;
            }
            else {
                odd+=i;
            }
            i++;
        }
        System.out.println("奇数之和:"+odd+"偶数之和"+even);

3.3 注意事项

  • 注意不要忘记声明④迭代部分。否则,循环将不能结束,变成死循环。

  • for循环和while循环可以相互转换

4 do…while循环

4.1 语法格式

初始化表达式① 
do{ 
	循环体③ 
	步进表达式④ 
} while (布尔表达式②);

4.2 执行流程

  • 执行顺序:①③④>②③④>②③④…②不满足为止。

  • ①负责完成循环变量初始化。

  • ②负责判断是否满足循环条件,不满足则跳出循环。

  • ③具体执行的语句

  • ④循环后,循环变量的变化情况

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4RcwJPHP-1605359434412)(\assets\dowhile.png)]

示例代码1:

public static void main(String[] args) { 
    // 输出10次HelloWorld
    int x=1; 
    do {
        System.out.println("HelloWorld"); 
        x++; 
    } while(x<=10); 
}

4.3 do…while循环的特点

无条件执行一次循环体,即使我们将循环条件直接写成false,也依然会循环一次。这样的循环具有一定的风险性,因此初学者不建议使用do…while循环。

4.4 for 和 while 的区别

  • 控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到了,而while循环结束还可以继续使用,如果你想继续使用,就用while,否则推荐使用for。原因是for循环结束,该变量就从内存中消 失,能够提高内存的使用效率。

  • 在已知循环次数的时候使用推荐使用for,循环次数未知的时推荐使用while。

4.5 关于循环嵌套

  • 将一个循环放在另一个循环体内,就形成了嵌套循环。其中for ,while ,do…while均可以作为外层循环或内层循环。
  • 实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的循环。
  • 设外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n次。
  • 一般,我们用外层循环来控制行数,内层循环来控制每行的内容

示例代码:

public static void main(String[] args) { 
    //5*8的矩形,打印5行*号,每行8个 
    //外循环5次,内循环8次 
    for(int i = 0; i < 5; i++){ 
        for(int j = 0; j < 8; j++){ 
            //不换行打印星号 
            System.out.print("*"); 
        }
        //内循环打印8个星号后,需要一次换行 
        System.out.println(); 
    } 
    //嵌套循环需要注意:
    //1.外层每步进一次,内层就完整执行一次;
    //2.内层循环可以使用外层循环的变量,外层循环不可以使用内层循环声明的变量;
    
}

4.6 跳出循环

break

作用:结束离break最近的循环

  • 使用场景:终止switch或者循环
    • 在选择结构switch语句中
    • 在循环语句中
    • 离开使用场景的存在是没有意义的
public static void main(String[] args) { 
	for (int i = 1; i<=10; i++) { 
	//需求:打印完两次HelloWorld之后结束循环 
		if(i == 3){ 
			break; 
		}
	System.out.println("HelloWorld"+i); 
	} 
} 

continue

  • 使用场景:结束本次循环,继续下一次的循环
public static void main(String[] args) { 
	for (int i = 1; i <= 10; i++) { 
        //需求:不打印第三次HelloWorld 
        if(i == 3){ 
            continue; 
        }
        System.out.println("HelloWorld"+i); 
	} 
} 

return

  • 并非专门用于结束循环的,它的功能是结束一个方法。当一个方法执行到一个return语句时,这个方法将被结束。

  • 与break和continue不同的是,return直接结束整个方法,不管这个return处于多少层循环之内

课堂练习1:

从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为0时结束程序,程序结束时显示所有数字的`和`。
    
从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入的所有数字的`和`为0时结束程序。

课堂练习2:

打印九九乘法表
            for (int i=1;i<10;i++){
            for (int j=1;j<=i;j++){
                int Product=i*j;
                System.out.print(""+i+"*"+j+"="+Product+" ");
            }
            System.out.println();
        }

课堂练习3:

打印100以内的所有质数
            for (int i = 2; i <= 100; i++) {
            boolean flag = true;
            for (int j = 2; j < i; j++) {
                if ( i % j == 0) {
                    flag = false;
                    break;
                }
            }
            if(flag){
                System.out.print(" "+i);
            }
        }

参考代码

public static void main(String[] args) {
		
		boolean isFlag = true;//标识i是否被j除尽,一旦除尽,修改其值

		for(int i = 2;i <= 100;i++){//遍历100以内的自然数
			
		
			for(int j = 2;j < i;j++){//j:被i去除
				
				if(i % j == 0){ //i被j除尽
					isFlag = false;
				}
				
			}
			//
			if(isFlag == true){
				System.out.println(i);
			}
			//重置isFlag
			isFlag = true;
		
		}
	}
public static void main(String[] args) {
		
		boolean isFlag = true;//标识i是否被j除尽,一旦除尽,修改其值
		int count = 0;//记录质数的个数

		//获取当前时间距离1970-01-01 00:00:00 的毫秒数
		long start = System.currentTimeMillis();

		for(int i = 2;i <= 100000;i++){//遍历100000以内的自然数
			
			//优化二:对本身是质数的自然数是有效的。
			//for(int j = 2;j < i;j++){
			for(int j = 2;j <= Math.sqrt(i);j++){//j:被i去除
				
				if(i % j == 0){ //i被j除尽
					isFlag = false;
					break;//优化一:只对本身非质数的自然数是有效的。
				}
				
			}
			//
			if(isFlag == true){
				//System.out.println(i);
				count++;
			}
			//重置isFlag
			isFlag = true;
		
		}

		//获取当前时间距离1970-01-01 00:00:00 的毫秒数
		long end = System.currentTimeMillis();
		System.out.println("质数的个数为:" + count);
		System.out.println("所花费的时间为:" + (end - start));//17110 - 优化一:break:1546 - 优化二:13

	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值