流程控制:循环

流程控制

一、switch case

1.语法结构

switch(表达式){

case常量1:
//执行语句1
break;
case 常量2:
//执行语句2
break;


default:
//执行语句
break;//结束当前的switch case 结构

}

String season=“summer”;
switch(season){
​ case “spring”:
​ System.out.println(“春暖花开”);
​ break;
​ case “summer”:
​ system.out.println(“夏日炎炎”);
​ break;
​ case “aut”:
​ system.out.println(“秋高气爽”);
​ break;
​ case “winter”:
​ system.out.println(“冬雪皑皑”);
​ break;
​ default:
​ system.out.println(“季节输入有误”);
​ break;
}

2.说明:

(1)switch表达式只能是特定的数据类型,byte \ short \char \ int \枚举(JDK5.0新增) \ String(JDK7.0新增)
(2)case后都是跟常量,使用表达式与这些常量做相等的判断,不能进行范围的判断。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BC8C97sK-1689558407154)(C:\Users\yuehuimin\AppData\Roaming\Typora\typora-user-images\1689204761323.png)]

(3)开发中,使用case匹配的情况有限。

(4)break:可以使用在switch-case中,一旦使用执行此break关键字,就跳出当前的switch-case结构。

(5)default:类似与if -else中的else.default位置是灵活的。default是可有可没有的。

3.练习:

学生成绩大于60分,输出及格,小于60分,输出不及格。

class SwitchCaseTest {

​ public static void main(String[] args) {

​ int score=78;

​ switch(score/10) {

​ case 0:

​ case 1:

​ case 2:

​ case 3:

​ case 4:

​ case 5:

​ System.out.print(“不及格”);

​ break;

​ case 6:

​ case 7:

​ case 8:

​ case 9:

​ case 10:

​ System.out.print(“及格”);

​ break;

​ default:

​ System.out.print(“成绩输入有误”);

​ }

​ }

}

或者score/60: case 0:不及格 case1:及格

从键盘上输入2023年的“month”和“day”,要求通过程序输入输出的日期为2023年的第几天。

import java.util.Scanner;

class SwitchCaseTest {

​ public static void main(String[] args) {

​ Scanner input=new Scanner(System.in);

​ System.out.println(“请输入2023年的月份:”);

​ int month=input.nextInt();

​ System.out.println(“请输入天数:”);

​ int day=input.nextInt();//阻塞

// switch-case的使用

​ int sumday=0;//记录总天数

​ switch(month) {

​ case 12:

​ sumday+=30 ;

​ case 11:

​ sumday+=31 ;

​ case 10:

​ sumday+=30;

​ case 9:

​ sumday+=30 ;

​ case 8:

​ sumday+= 31;

​ case 7:

​ sumday+= 30;

​ case 6:

​ sumday+= 31;

​ case 5:

​ sumday+= 30;

​ case 4:

​ sumday+= 31;

​ case 3:

​ sumday+= 28;//记录2月份的天数

​ case 2:

​ sumday+= 30;//记录1月份的天数

​ case 1:

​ sumday+= day;

​ }

​ System.out.print(sumday);

​ input.close();

​ }

}

二、for循环

1.说明:

​ Java中规范了三种循环结构:for,while,do-while

​ 凡是循环结构,就一定会有4个要素:

​ ~1初始化条件 ~2循环条件(一定是boolean类型的变量或 表达式)

​ ~3循环体 ~4迭代部分

2.for循环的格式

for(~1 ; ~2 ; ~4 ){

~3

}

执行过程:~1 ----》2-------》3------》4------》2-------》~3

3.案例

遍历1-100以内所有的偶数,并获取偶数的个数,获取所有偶数的和。

	int count=0;//记录偶数的个数

​ int sum=0;//记录所有偶数的和

​ for(int i=0;i<=100;i++){

​ if(i%2==0){

​ System.out.println(i);

​ count++;

​ sum+=i;

}

}

System.out.println(count);

System.out.println(sum);

输出所有的水仙花数,所谓的水仙花数是指应该3位数,其各个位上数字立方和等于其本身。

class ForTest {

​ public static void main(String[] args) {

// 遍历所有的三位数

​ for(int i=100;i<=999;i++) {

// 获取其各个位上的数

​ int ge=i%10;

​ int shi=i/10%10;

​ int bai=i/100;

​ if(i==gegege+shishishi+baibaibai) {

​ System.out.println(i);

​ }

​ }

​ }

}

输入两个正整数m和n,求其最大公约数和最小公倍数

class ForTest {

​ public static void main(String[] args) {

// 需求1:最大公约数

​ int m=12,n=20;

​ int min=(m

// 方法1:

​ int result=1;

​ for(int i=1;i

​ if(m%i0&&n%i0) {

​ result=i;

​ }

​ }

​ System.out.println(result);

// 方法2:

​ for(int min;i>=1;i–) {

​ if(m%i0&&n%i0) {

​ System.out.println(i);

​ break;

​ }

​ }

// 需求2:最小公倍数

​ int max=(m>n)?m:n;

​ for(int i=max;i<=m*n;i++) {

​ if(i%m0&&i%n0) {

​ System.out.println(i);

​ break;

​ }

​ }

​ }

}

三、while循环

1.while循环格式

初始化条件

while(循环条件){

​ 循环体

​ 迭代部分

}

2.for循环与while循环的区别:

初始化作用域不同。while循环中的初始化条件在while的循环结束后,依然有效。

3.案例

随机生成一个100以内的数,猜这个随机数是多少

从键盘输入数,如果大了,提示大了,小了提示小了;如果猜对了,就不再猜了,并统计一共猜了几次

import java.util.Scanner;

class WhileTest {

​ public static void main(String[] args) {

​ //1.生成一个【1,100】的随机整数

​ int random=(int)(Math.random()*100)+1;

​ //2.使用Scanner,从键盘获取数据

​ Scanner scan=new Scanner(System.in);

​ int guess=scan.nextInt();

​ //3.声明一个变量,记录猜的次数

​ int guessCount=1;

​ //4.使用循环结构,进行多次循环的对比和获取数据

​ while(guess!=random) {

​ if(guess>random) {

​ System.out.print(“猜大了”);

​ }else if(guess

​ System.out.print(“猜小了”);

​ }

​ System.out.print(“请输入1-100范围内的整数:”);

​ guess=scan.nextInt();

		guessCount++;

​ }

​ System.out.print();

​ }

}

四、do-while

1.do-while格式

初始化条件

do{

​ 循环体

​ 迭代体

}while(循环条件)

2.执行过程

初始化条件-------》循环体----------》迭代体---------》循环条件

先跑一遍再判断

3.说明

do -while循环至少执行一次循环体。

for,while,do-while循环三者之间是可以相互转换的。】

do-while循环结构,在开发中,相较于for,while循环来讲,使用的较少

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bMkVsu9j-1689558407156)(C:\Users\yuehuimin\AppData\Roaming\Typora\typora-user-images\1689380135054.png)]

退出循环有两种方式:1.不满足while中的循环条件 2.break跳出最近的循环。

4.案例

class WhileTest {

​ public static void main(String[] args) {

// 需求:遍历100以内的偶数,并输出偶数的个数和总和

​ int i=1;

​ int count=0;//记录偶数的个数

​ int sum=0;//记录偶数的总和

​ do {

​ if(i%2==0) {

​ System.out.println(i);

​ count++;

​ sum+=i;

​ }

​ i++;

​ }while(i<=100);

​ System.out.print(“偶数的个数为:”+count+“偶数的总和:”+sum);

​ }

}

声明变量balance并初始化为0,用以表示银行账户的余额,下面通过ATM机程序实现存款,取款功能。


1.存款

2.取款

3.显示余额

4,退出

请选择(1-4):

import java.util.Scanner;

class DowhileTest {

​ public static void main(String[] args) {

// 1.定义balance的变量,记录账户余额‘

​ double balance=0.0;

​ boolean flag=true;//控制循环的结束

​ Scanner scan=new Scanner(System.in);//实例化Scanner

// 2.声明ATM取款界面

​ do {

​ System.out.println(“ATM”);

​ System.out.println(“1.存款”);

​ System.out.println(“2.取款”);

​ System.out.println(“3,显示余额”);

​ System.out.println(“4.退出”);

​ System.out.print(“请选择(1-4):”);

// 3.使用Scanner获取用户的选择

​ int section=scan.nextInt();

// 4.根据用户的选择执行1

​ switch(section) {

​ case 1:

​ System.out.print(“请输入存款金额”);

​ double money1=scan.nextDouble();

​ if(money1>0) {

​ balance+=money1;

​ }

​ break;

​ case 2:

​ System.out.print(“请输入取款金额”);

​ double money2=scan.nextDouble();

​ if(money2>0&&money2<=balance) {

​ balance-=money2;

​ }else {

​ System.out.println(“输入的数据有误或余额不足”);

​ }

​ break;

​ case 3:

​ System.out.print(“账户余额为:”+balance);

​ break;

​ case 4:

​ flag=false;

​ System.out.print(“欢迎下次使用”);

​ break;

​ default:

​ System.out.println(“输入有误,请重新输入”);

​ }

​ }while(flag);

​ // 关闭资源

​ scan.close();

​ }

}

五、“无限”循环

1.语法格式:

最简单的“无限”循环格式: while(true), for( ; ; )

2.适用场景:

开发中,有时候不确定需要循环多少次,需要根据循环内部某些条件,来控制循环的结束(使用break)。

如果循环不能结束,则构成了死循环。

3.案例

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

import java.util.Scanner;

class DowhileTest {

​ public static void main(String[] args) {

​ Scanner scan=new Scanner(System.in);

​ int positiveCount=0;//记录正数个数

​ int negativeCount=0;//记录负数个数

​ while(true) {

​ System.out.print(“请输入一个整数(输入0时结束程序):”);

​ int num=scan.nextInt();

​ if(num>0) {

​ positiveCount++;

​ }else if(num<0) {

​ negativeCount++;

​ }else {

​ System.out.println(“程序结束”);

​ break;

​ }

​ }

​ System.out.println(“正数的个数为”+positiveCount+“负数的个数为:”+negativeCount);

​ }

}

六、嵌套循环

1.嵌套循环

是指一个循环结构A的循环体是另一个循环结构B

外层循环:循环结构A

内层循环:循环结构B

2.说明

1)对于两层嵌套循环来说,外层循环控制行数,内层循环控制列数

2)举例:外层循环执行m次,内层循环执行n次,则内层循环的循环体共执行m*n次

3.案例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gAgAN2sE-1689558407157)(C:\Users\yuehuimin\AppData\Roaming\Typora\typora-user-images\1689382700029.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PxAYb7uD-1689558407157)(C:\Users\yuehuimin\AppData\Roaming\Typora\typora-user-images\1689382965336.png)]

内层控制列数,外层控制行数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WAB1uGA0-1689558407158)(C:\Users\yuehuimin\AppData\Roaming\Typora\typora-user-images\1689383149689.png)]

(1)显示菱形,99乘法表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ohqUYlUp-1689558407158)(C:\Users\yuehuimin\AppData\Roaming\Typora\typora-user-images\1689384439634.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JLJq3Pmo-1689558407158)(C:\Users\yuehuimin\AppData\Roaming\Typora\typora-user-images\1689384944597.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ps9uc0fk-1689558407160)(C:\Users\yuehuimin\AppData\Roaming\Typora\typora-user-images\1689385013651.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xd2BlQDz-1689558407161)(C:\Users\yuehuimin\AppData\Roaming\Typora\typora-user-images\1689385048481.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P5bzEYMG-1689558407163)(C:\Users\yuehuimin\AppData\Roaming\Typora\typora-user-images\1689385080841.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W8c1vz1K-1689558407164)(C:\Users\yuehuimin\AppData\Roaming\Typora\typora-user-images\1689385560001.png)]

七、break和continue的使用

​ 使用范围 在循环结构中的作用

break: switch-case

​ 循环结构 结束(跳出)当前循环结构

continue 循环结构中 结束(跳出)当次循环结构

相同点:在此关键字的后面不能声明执行语句。

就近原则:跳出离得最近的循环

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ddxx7q4q-1689558407165)(C:\Users\yuehuimin\AppData\Roaming\Typora\typora-user-images\1689386356958.png)]

八、经典案例

找出100以内所有的素数(质数)?100000以内的

class PrimeNumberTest {

// 质数:2,3,5,7,11,19,23

/*

* 质数:只能被1和它本身整除的自然数。

* —》换句话说,从2开始到这个自然数为止,不存在此自然数的约数

*/

​ public static void main(String[] args) {

/*

* 方法1:

​ for(int i=2;i<=100;i++) {//遍历100以内的自然数

​ int num=0;//记录i的约数的个数(从2开始,到i-1为止)

// 判断i是否是质数

​ for(int j=2;j

​ if(i%j==0) {

​ num++;

​ }

​ }

​ if(num==0) {

​ System.out.println(i);

​ }

​ }

​ */

// 方法2:

​ for(int i=2;i<=100;i++) {

​ boolean isFlag=true;

​ for(int j=2;j

// 判断i是否是质数

​ if(i%j==0) {

​ isFlag=false;

​ }

​ }

​ if(isFlag) {//if(isFlag==true)

​ System.out.println(i);

​ }

​ }

​ }

}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部