控制流程语句
一、条件语句
1)if语句
1、单分支语句
if(布尔表达式){
执行语句;
}
2、双分支语句
if(布尔表达式){
执行语句;
}else{
执行语句;
}
示例:猜测硬币的正反面
/* * 需求:猜测硬币的正反面 * * 0为正面 * 1为反面 * * */ package edu.practice_1025; import java.util.Scanner; public class Work6 { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("一起来猜猜硬币的正反面,正面(0) or 反面(1)??"); int number = (int)(System.currentTimeMillis() % 2); System.out.println("请输入你的猜想:"); int i = input.nextInt(); if (number == i) { System.out.println("恭喜你,猜对了!"); } else { System.out.println("不好意思,你猜错了!"); } input.close(); System.out.println("生成的随机数:" + number ); } }
3、多分支if-else语句
if(布尔表达式1){
执行语句;
}else if(布尔表达式2){
执行语句;
.....
}else{
执行语句;
}
4、嵌套if语句
/* * 需求:根据输入的成绩打印出对应的等级 * * 分析: * 1、输入成绩 * 2、判断成绩等级 * 法一:if-elseif语句 * 法二:嵌套的if-else语句 * * */ package edu.practice_1025; import java.util.Scanner; public class Work8 { public static void main(String[] args) { Scanner input=new Scanner(System.in); //输入成绩 System.out.println("请输入成绩:"); double score = input.nextDouble(); //法一:if-elseif语句 if (score>=90&&score<=100) { System.out.println("优秀"); } else if (score>=80) { System.out.println("良好"); } else if (score>=70) { System.out.println("中等"); } else if (score>=60) { System.out.println("及格"); } else { System.out.println("不及格"); } input.close(); //法二:嵌套的if-else语句 if (score>=90) { System.out.println("优秀"); } else { if (score>=80) { System.out.println("良好"); } else { if (score>=70) { System.out.println("中等"); } else { if (score>=60) { System.out.println("及格"); } else { System.out.println("不及格"); } } } } } }
2)switch-case语句
语法结构1:
switch(switch表达式){
case 值1:
语句组1;
case 值2:
语句组2;
case 值3:
语句组3;
.....
default:
默认语句组;
}
从jdk14开始,对switch进行了更新
语法结构2:
switch(switch表达式){
case 值1 -> 语句组1;
case 值2 -> 语句组2;
.....
default -> 默认语句组;
}
示例:根据月份显示对应的英文月份名
/* * 需求:随机产生 1和12之间整数的程序, * 并且根据数字1,2,3…12, * 显示相应的英文月份:January,February,…December。 * * 分析: * 1、生成1-12之间的随机数 * 2、利用case条件语句 * 3、显示对应的英文月份 * */ package edu.practice_1025; public class Work2 { public static void main(String[] args) { int number = (int)(System.currentTimeMillis() % 12); System.out.println("生成的随机数为:" + number); switch (number) { case 1: System.out.println( number + "月:January"); break; case 2: System.out.println( number + "月:February"); break; case 3: System.out.println( number + "月:March"); break; case 4: System.out.println( number + "月:April"); break; case 5: System.out.println( number + "月:May"); break; case 6: System.out.println( number + "月:June"); break; case 7: System.out.println( number + "月:July"); break; case 8: System.out.println( number + "月:August"); break; case 9: System.out.println( number + "月:September"); break; case 10: System.out.println( number + "月:October"); break; case 11: System.out.println( number + "月:November"); break; case 0: System.out.println( number + 12 + "月:December"); break; } } }
3)嵌套条件
/* * 提示用户输入一个年份和月份,然后显示这个月的天数。 * * 分析: * 1、输入一个年份 * 2、输入一个月份 * 3、判断天数 * ①1,3,5,7,8,10,12 31天 * ②4,6,9,11 30天 * ③2 闰年为29 不是闰年为28天 * 4、输出结果:****年*月有**天 * * */ package edu.practice_1025; import java.util.Scanner; public class Work4 { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.println("请输入年份:"); int year = in.nextInt(); System.out.println("请输入月份:"); int month = in.nextInt(); in.close(); int day; //if-elseif语句 // if (month == 1 || month ==3 || month ==5 || month ==7 || month ==8 || month ==10 || month ==12){ // day = 31; // } else if (month != 2){ // day = 30; // }else { // if (year%400==0 || (year % 4 == 0 && year % 100 != 0)) { // day = 29; // }else { // day = 28; // } // } //switch-case语句 switch (month) { case 1,3,5,7,8,10,12 -> day = 31; case 4,6,9,11 -> day = 30; case 2 -> { if (year%400==0 || (year % 4 == 0 && year % 100 != 0)) { day = 29; }else { day = 28; } } default -> day = 0; }; System.out.println(year + "年" + month + "月有" + day +"天。"); } }
二、循环语句
1)while语句

①初始化部分:只做一次初始化
while(②循环条件部分){ //条件为true,进入循环
③循环体部分
④迭代部分:当循环体部分执行一次以后,执行迭代部分
}
示例:
/* * 需求:养老无忧计划 * 描述:以目前的生活水平想要无忧养老需要存够600万养老金,假设你每年可以存N万,年利率为3%,问需要做牛做马多少年? * * 分析: * 第一年:N * 第二年:N*(1+3%)+N * * 设计: * 1、常年DEPOSIT = 600 ,每年定存 N * 2、年数:year * 总金:total_money * 3、while 循环 * 4、 total_money=total_money*(1+0.03)+N * 5、每次循环,year+1 * 6、输出结果:每年存%d万,存到%d万需要%d年 * * */ package edu.practice_1027; public class Work11 { public static void main(String[] args) { final int DEPOSIT = 600; final int N = 10; int year = 0; double total_money = 0; while(total_money < DEPOSIT ) { total_money=total_money *(1+0.03)+N; year++; } System.out.printf("每年存%d万,存到%d万需要%d年",N,DEPOSIT,year); } }
2)do-while 语句

语法结构:
do{
循环体;
迭代部分;
}while(条件语句)
public class DoWhileDemo { public static void main(String[] args) { int sum = 0; int num; Scanner input = new Scanner(System.in); do { num = input.nextInt(); sum += num; }while(num != 0); System.out.println(sum); input.close(); } }
3)for 语句

for (初始化部分;循环条件;迭代部分){
循环体;
}
示例:打印图形
package edu.practice_1027; public class Work19 { public static void main(String[] args) { System.out.println("图形一"); for(int i = 1 ; i <= 6 ; i++) { for(int j = 1 ; j <= i ; j++) { System.out.print(j+"\t"); } System.out.println(); }

System.out.println("图形二"); for(int i = 6 ; i >= 1 ; i--) { for(int j = 1 ; j <= i ; j++) { System.out.print(j+"\t"); } System.out.println(); }

System.out.println("图形三"); for(int i = 1 ; i <= 6 ; i++) { for(int j = 5 ; j >= i ; j--) { System.out.print("\t"); } for(int j = i;j>= 1 ;j--) { System.out.print(j + "\t"); } System.out.println(); }

System.out.println("图形四"); for(int i = 6 ; i >= 1 ; i--) { for(int j = 5 ; j >= i ; j--) { System.out.print("\t"); } for(int j = 1 ; j <= i ; j++) { System.out.print(j+"\t"); } System.out.println(); }

System.out.println("图形五"); for(int i = 1 ; i <= 6 ; i++) { for(int j = 5 ; j >= i ; j--) { System.out.print("\t"); } for(int j = i;j>= 1 ;j--) { System.out.print(j + "\t"); } for(int j = 2 ; j <= i ; j++) { System.out.print(j+"\t"); } System.out.println(); }

System.out.println("图形六"); for(int i = 1; i<=6;i++) { for(int j =5 ;j>=i;j--) { System.out.print("\t"); } for(int j = 0;j<=i-1 ;j++ ) { System.out.print(Math.pow(2,j) + "\t"); } for(int j = i-2 ; j >= 0;j--) { System.out.print(Math.pow(2, j)+"\t"); } System.out.println(); } } }

4)嵌套循环
外层循环
内层循环
三、break、continue 、return使用
break:结束(跳出)当前循环,不再进入下一次循环。注意:“当前”指的是break所在的循环。
continue:跳过所在(指定)循环的当次循环,进入下一次循环。
return:用在循环里,会终止循环,并且结束return所在的方法。因此后面的语句不执行。
示例1:显示素数
/* *需求:打印2到10000的所有素数,每行显示8个素数 * *分析: *素数:只能被1和本身整除的数 *嵌套循环 * */ package edu.practice_1027; public class Work7PrimeNumber { public static void main(String[] args) { int i,j; int c=0; for(i=2;i<=10000;i++) { for( j=2;j<i;j++) { if (i%j==0) //如被整除跳出循环 break; } if (j>=i) { System.out.print(" "+i+"\t"); c++; //每行显示八个数 if (c==8) { System.out.println(); c=0; } } } } }
示例2:输入两个正整数m和n,求其最大公约数和最小公倍数
/* * 需求:输入两个正整数m和n,求其最大公约数和最小公倍数 * * 分析: * 1、请输入两个正整数 m 、n * 2、保证 m> n * 3、若m是n的倍数,则n为最大公约数,m为最小公倍数 * 4、若不是进一步判断最大公约数 * 5、最小公倍数=两数乘积/最大公约数 * */ package edu.practice_1027; import java.util.Scanner; public class Work4 { public static void main(String[] args) { System.out.println("请输入两个整数:"); Scanner in = new Scanner(System.in); int m = in.nextInt(); int n = in.nextInt(); in.close(); //初始化最大公约数、最小公倍数 int gcd = 1; int lcm = 1; //保证m > n if(m < n) { int temp = n; n = m; m = temp; } //若m是n的倍数,则n为最大公约数,m为最小公倍数 if(m % n == 0) { gcd = n; lcm = m; System.out.printf("(%d,%d)的最大公约数:%d,最小公倍数:%d",n,m,gcd,lcm); return; } //进一步判断最大公约数 for (int k = 2;k <= n && k <= m ; k++ ) { if(n % k == 0 && m % k == 0) gcd = k; } //最小公倍数 lcm = n * m /gcd; System.out.printf("(%d,%d)的最大公约数:%d,最小公倍数:%d",n,m,gcd,lcm); } }
浙公网安备 33010602011771号