Java基础:流程控制(分支流程 if分支和switch分支)
1.1 流程控制
指挥程序的执行流程,执行顺序;
1.1.1 流程控制分类
I、顺序流程
程序逐行执行;
程序在执行的过程中,可能根据业务不同的情况要采取不同的策略。执行不同的代码流程;
III、循环流程
希望通过一种流程能够往复的执行某些代码,而不需要重复编写这些代码;
1.2 分支流程
1.2.1 switch分支
zhuanlan.zhihu.com/p/408799706 JDK17 switch
的用法
switch(month){
case 12,1,2->System.out.println("你就像那冬天里的一把火");
case 3,4,5->System.out.println("春天在哪里呀!春天在哪里~");
case 6,7,8->System.out.println("夏天夏天悄悄过去 留下小秘密");
case 9,10,11->System.out.println("就让秋风带走我的思念 ");
}
//测试switch语法结构
public class SwitchTest{
public static void main(String[] args) {
//声明一个变量 这个变量存储月份1-12, 通过存储的变量的值判定当前月份所属的季节
//1:声明变量存储月份
char month = 5;
//2:通过switch去完成
switch(month){
case 12:
case 1:
case 2:
System.out.println("你就像那冬天里的一把火"); break;
case 3:
case 4:
case 5:
System.out.println("春天在哪里呀!春天在哪里~");break;
case 6:
case 7:
case 8:
System.out.println("夏天夏天悄悄过去 留下小秘密");break;
case 9:
case 10:
case 11:
System.out.println("就让秋风带走我的思念 ");break;
default:
System.out.println("您的输入有误。。。");break;
}
System.out.println("GAME OVER");
}
}
I、语法结构
switch(expression){
case value1:
statement1;break;
case value2:
statement2;break;
case value3:
statement3;break;
.............
default:
statement3;[break;]
}
II、执行顺序
- 计算表达式的值
- 依次匹配对应的case 如果匹配成功执行对应的执行语句;
- 一定要保证后面break,跳出整个switch结构;
- 所有的case都不满足,执行default,如果存在的话;
III、注意事项
- 表达式的结果可以通过自动类型转换转换为int,基本数据类型中只有byte、short、int、char 4种类型可以使用;
JDK1.5
之后支持枚举类型Enum
,JDK1.7
之后支持String字符串;
1.2.2 if分支结构
// Math.random() 指定区间的随机数(整数) [1,8] [min,max]
// (int)(Math.random()*(max-min+1)+min)
I、单分支结构
//测试if单分支
public class IfTest01{
public static void main(String[] args) {
// 生成一个随机数 查看随机数是否大于50 大于则显示随机数的结果反之则结束
double random = Math.random(); //[0-1)随机小数
System.out.println(random);
// Math.random() 指定区间的随机数(整数) [1,8] [min,max]
// (int)(Math.random()*(max-min+1)+min)
// 产生一个[45,80]
int num = (int)(Math.random()*36+45);
System.out.println(num);
//判定
if(num>50){
System.out.println("产生的数字大于50,数字是:"+num);
}
System.out.println("GAME OVER");
}
}
A、语法结构
if(expression){
statement;
}
B、执行顺序
- 判定expression的结果 如果结果时true 则执行对应的执行语句;结束整个if单分支
- 如果表达式的结果时false,则跳过if单分支,执行后续代码
C、注意事项
- 分支比较简单 可能不能完全使用情况比较复杂的业务;
// 声明一个变量
boolean flag = true;
if(flag=false){
System.out.println("aa");
}
System.out.println("bb");
II、双分支结构
//测试if双分支
public class IfTest02{
public static void main(String[] args) {
// 判定某个数字的奇偶性
// 1: 随机生成一个数字 [20,56]
int random = (int)(Math.random()*37+20);
System.out.println("产生的随机数是:"+random);
//2: 判定奇偶性
//boolean flag = (random%2)==0;
/*if((random%2)==0){
System.out.println("产生的随机数是:"+random+",它是一个偶数");
}else{ //flag = false
System.out.println("产生的随机数是:"+random+",它是一个奇数");
}*/
String msg = (random&1)==1?"奇数":"偶数";
//System.out.println(msg);
System.out.println("产生的随机数是:"+random+",它是一个"+msg);
System.out.println("GAME OVER");
}
}
A、语法结构
if(expression){
statement1;
}else{
statement2;
}
B、执行顺序
- 判定expression的结果 如果结果时true 则执行对应的执行语句
statement1
;结束整个if双分支 - 如果表达式的结果时false,则执行
statement
2, 则跳过if双分支,执行后续代码
C、注意事项
- 分支比较简单 可能不能完全使用情况比较复杂的业务;
- 双分支中的if-else一定会被执行一个;
III、多分支结构
//测试if多分支
// 分别使用if和switch 来完成方向控制
// 45上 46右 47下 48左
public class IfTest03{
public static void main(String[] args) {
// 随机生成一个分数 判定分数的等级
// 100 NB [90-100) 优秀 [80-90) 良好 [70-80) 还行 [60-70) 勉强
//1:生成一个随机数
int score = (int)(Math.random()*92+9);
System.out.println("生成的分数是:"+score);
if(score==100){
System.out.println("NB");
}else if(score>=90 && score<100){
System.out.println("优秀");
}else if(score>=80 && score<90){
System.out.println("良好");
}else if(score>=70 && score<80){
System.out.println("还行");
}else if(score>=60 && score<70){
System.out.println("勉强");
}else{
System.out.println("男女混合双打");
}
System.out.println("GAME OVER");
}
}
A、语法结构
if(expression1){
statement1;
}else if(expression2){
statement2;
}else if(expression3){
statement3;
}..........{
}[else{ statementN;}]
B、执行顺序
- 判定
expression1
的结果 如果结果时true 则执行对应的执行语句statement1
;结束整个if多分支 - 如果表达式的结果时false,判定
expression2
的结果,如果结果时true,则执行statement
2, 则跳过if多分支,执行后续代码 - 以此类推
- 直到所有的结果结果都不满足的情况下,如果代码中存在else 则执行else的内容
C、注意事项
- 多分支可能会导致代码过于臃肿,所以一般不建议分支出现3条以上;
- 编写条件的时候,可以适当的增加整个分支的判定效率;
- if做的事区间判定,switch是等值判定,他们是可以互通的;
转载自:https://juejin.cn/post/7135776606500421640