Java流程控制语句
在java中所有程序的执行都基于流程控制语句
Java流程控制语句分类:
1、顺序流程控制语句
程序执行由上至下由左至右 按条执行
一条java语句的结束由;决定
在每一条语句书写结束后必须以;结束
2、选择流程控制语句
选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。
(1)单分支
当代码顺序执行至分支语句进行逻辑判断 判断布尔表达式中返回的值 为true则执行相应语句块的代码
语法: if(布尔表达式){语句块}
(2)双分支
当代码顺序执行至分支语句进行逻辑判断 根据返回的值true执行语句块1 false执行语句2
语法:if(布尔表达式){语句块1}else{语句块2}
(3)多分支
当代码顺序执行至分支语句进行逻辑判断 根据返回的值true执行语句块1 false 继续判断布尔表达式2 返回true执行语句2 否则继续判断。。。。。。。
语法:if(布尔表达式1){语句块1}else if(布尔表达式2){语句块2}…else{语句块3}
3、循环流程控制语句
三目运算符可以转化为流程控制语句,但是流程控制语句不一定可以转化为三目运算符,因为运算符运算需要返回结果。
三目运算符与流程控制语句区别:
运行效率:再涉及到运算操作时三目运算符效率略高,但如果只是进行true false判断进行结果的执行 流程控制语句效率高(三目运算符是运算必须返回结果后才能使用)
语法:三目运算符语法上相比if简单但是如果涉及到复杂判断三目运算符难以理解
switch case分支语句
与if eclse分支语句不同的是 switch是通过数据匹配的形式进行分支操作
switch语句语法:
switch(变量) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
…
default:
语句体n+1;
break;
}
程序运行过程中为相应变量动态赋值,在case中对具体值与变量值进行数据匹配,匹配通过执行相应的语句体 否则若全部匹配项匹配失败执行default中的语句体 break执行完当前语句体后直接退出匹配
相当于每次case用变量与case指定的值进行==判断如果返回true 执行相应case下语句块
break理解:执行代码块后结束其他匹配操作(结束其他switch中代码的运行)
Switch代码的执行与case无关,代码块的执行取决于boolean类型中间变量默认为false;
当case代码匹配之后将boolean值改为true ,当执行到相应可执行代码块,进行判断,判断boolean类型的值为true则执行代码块 否则不执行(只有case匹配时会将boolean类型的值赋值为true )
If与switch使用场景
当进行大范围的数据判断操作使用if
当进行指定数据并且数据较少的时候使用switch
注意事项
case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的
default可以省略吗?
可以省略。一般不建议。除非判断的值是固定的。(单选题)
break可以省略吗?
可以省略,一般不建议。否则结果可能不是你想要的
default的位置一定要在最后吗?
可以出现在switch语句任意位置。
switch语句的结束条件
遇到break
执行到程序的末尾
练习:
// 输入日输出当前已过天数 还剩天数int sumDay = 0;// 保存已过天数int TwoMonthDay = 28;// 二月天数int yearDay=365;if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
TwoMonthDay = 29;yearDay=366;}switch (month-1) {
case 11:sumDay += 30;case 10:sumDay += 31;case 9:sumDay += 30;case 8:sumDay += 31;case 7:sumDay += 31;case 6:sumDay += 30;case 5:sumDay += 31;case 4:sumDay += 30;case 3:sumDay += 31;case 2:sumDay += TwoMonthDay;case 1:sumDay += 31;default:sumDay += day;break;}System.out.println("已过"+sumDay+"天");System.out.println("还剩"+(yearDay-sumDay)+"天");
Scanner扫描器类
// Scanner扫描器类Scanner sc = new Scanner(System.in);// 数据类型 变量名 =new 数据类型(参数)// 声明一个名为sc的扫描器对象// 创建一个新的扫描器对象扫描控制台输入的内容并赋值给名为sc的变量// String name = sc.nextLine();// String字符串类 用于保存字符串// sc.nextLine()获取下一行输入内容并返回// System.out.println(name+"你好帅");// scanner程序员前期进行数据输入的工具类// 使用控制台模拟数据交互功能// 使用scanner模拟用户登录功能System.out.println("请输入账号");String username = sc.nextLine();System.out.println("请输入密码");String password = sc.nextLine();if (username.equals("admin") && password.equals("admin")) {
System.out.println("登录成功");} else {
System.out.println("登录失败");}
Random随机数类
// import导入 导入其他包中的类 并进行使用Random r = new Random();//随机数类//创建随机数对象//在现实世界中不存在真正的随机数 //伪随机数-》通过计算或公式生成的数int number = r.nextInt(10);//随机生成一个整数[0~10)之间的整数// System.out.println(number);//随机生成七选三 int a=r.nextInt(7)+1;int b=r.nextInt(7)+1;int c=r.nextInt(7)+1;System.out.println("你选择的号码为:"+a+b+c);