switch分支结构
- 基本语法:
switch(表达式){
case 常量1://当……
语句块1;【只要说明是语句块就可能是一个语句或者多条语句】
break;
case 常量2:
语句块2;
break;
……(以此类推,可以写多个)
case 常量n:
语句块n;
break;
defult:【defult后面用的是冒号!分号】
defult语句块;
break;
- 说明
1.switch关键字,表示switch分支
2.表达式,对应一个值(运行之后必定是一个固定的值)
3.case 常量1 :当表达式的值等于常量1 就执行语句块1
4. break : 表示推出switch
5.如果和case常量1 匹配,就执行语块1 如果没有匹配 就继续匹配 case 常量2
6.如果一个都没有匹配上 执行default
- 注意事项和细节讨论
1 表达式数据类型 应该和case 后的常量类型保持一致 或者是可以自动转化成相互比较的类型
比如: 输入的是字符 而常量是 int
【Java数据类型】
- 基本数据类型
- 数值型
- 整数型 存放整数
byte short int long
- 浮点(小数)类型
float(单精度) double(双精度)
- 字符型 char 存放单个字符
- 布尔型 Boolean 存放true false
- 引用数据类型
- 类 class
- 接口 interface
- 数组[]
【基本数据类型转换】: 精度小的可以自动转换为精度大的[自动转换]
- 规则[只能按规则顺序转换]
char->int->long->float->double
byte->short->int->long->float->double
- 注意和细节
1 有多种类型的数据混合运算时 系统首先自动将所有数据转换成容量最大的那种数据类型 然后在进行计算
2 当我们把精度(容量)大的数据类型赋值给精度(容量)小的数据类型则会报错 反之就会进行自动类型转换
3 byte short和char 之间不会相互自动转换
4 byte short char 他们三者可以计算 在计算时
精度大的 强制 转换为精度小的[强制转换]
- 介绍
自动转换的逆过程 将容量大的数据类型转化为容量小的数据类型 使用的时候要加上 强制转换符()
但是可能造成精度降低或者溢出【注意】
- 细节说明
1 当进行数据的大小 大->小 就需要使用强制转换
2 强制转换符号只针对最近的操作有效 往往会使用小括号提升优先级
比如: int x=(int)10*3.5+6*1.5; 这个是优先提升10
int y=(int)(10*3.5+6*1.5); 这个优先提升的是括号内这个式子的结果
3 char类型可以保存 int 的常量值 但是不能保存 int 的变量值 需要进行强转
4 byte 和 short 类型在进行运算的时候 当做int 类型处理
package lfx250218;
public class ForceCovertDetail {
//强制转换类型的细节说明
public static void main(String[] args) {
//1 强制转换符只针对最近的操作有效 往往会使小括号提高优先级
//int x=(int)10*3.5+6*3.5;//3.5是double类型的 double->int是转换不过去
int y=(int)(10*3.5+6*1.5);
// System.out.println(x);
System.out.println(y);
//char 类型可以保存int 的常量值 但是不能保存int的变量值需要进行强转
char c1=10;
int m=100;
// char c2=m;
char c3=(char) m;
System.out.println(c3);//输出100 所对应的字符【看ASCII码】
}
}
2 switch(表达式)中表达式的返回值必须是【byte short int char enum String】
【添加enum(蓝桥杯中基础题的题型之一)】 enum是一个关键字,用于定义枚举类型。枚举类型是一种特殊的数据类型 它允许你定义一组命名的常量
- 基本概念:
枚举类型是一中类类型 它可以包含自己的 方法 构造函数 字段 使用枚举可以提高代码的可读性和可维护性 因为它
将一组相关常量封装在一起 并且可以确保变量只能取枚举中定义的值
- 特点:
- 常量集合: 本质上是一组预定义的常量集合 这些常量是枚举类型的实例
- 类型安全: 可以确保变量只能取枚举中定义的值,避免了使用普通数字或者字符串常量可能出现的错误
- 可迭代: 枚举类型实现了 java.lang.Enum类没并且可以使用valus()方法返回一个包含所有枚举常量的数组,从而进行迭代操作
3 case子句中的值必须是常量 而不能是变量
4 default子句是可选的 当没有匹配的case时 执行default
5 break语句是用来执行完一个case分支后使程序跳出switch语句块 如果没有写break 程序会顺序执行到switch结尾
switch和if的比较
- 如果判断的具体数值不多 而且符合btye short int char enum String 这6种类型 虽然两个语句都可以使用 但是建议使用switch语句
- 其他情况: 对区间判断 对结果为Boolean 类型判断 使用if if 的范围更加广泛
switch相关的练习代码
package lfx250218;
import java.util.Scanner;
//switch的入门小练习
public class switch01 {
public static void main(String[] args) {
/*
要求:
1 请编写一个程序,该程序可以接受一个字符,比如:a b c d e f g
2 a 表示星期一 b 表示星期二……
3 根据用户的输入显示对应的信息 要求使用switch 语句完成
思路分析
1 接收一个字符 创建一个Scanner对象
2 使用switch语来完成匹配信息
*/
Scanner mya=new Scanner(System.in);
System.out.println("请输入一个字符,并且字符要在a和g之间");
char c1=mya.next().charAt(0);//把接收到的一个字符串转成一个字符
/*
Java的基本数据类型
- 整数型
byte:储存空间 1个字节(8位)
取值范围 -128到127
short:储存空间 2个字节(16位)
int: 储存空间 4个字节(32位)
long: 储存空间 8个字节(64位)
- 浮点型
float: 储存空间 4个字节(32位)
double: 储存空间 8个字节(64位)
- 字符型
char 储存空间 2个字节(16位)
-布尔型
boolean 取值true或者false
[弄混淆]
1 String是一个非常重要并且常用的类,用于表示字符串
2 String对象一旦被创建,其内容不能被改变 当对String对象进行 拼接 ,替换 等操作时
3 实际上是创建了一个新的String对象
4 字符串拼接使用的是“+”运算
*/
//在Java中只要有值返回 就是一个表达式
switch (c1){
case 'a' :
System.out.println("今天星期一。");
break;
case 'b' :
System.out.println("今天星期二。");
break;
case 'c' :
System.out.println("今天星期三。");
break;
case 'd' :
System.out.println("今天星期四。");
break;
case 'e' :
System.out.println("今天星期五。");
break;
case 'f' :
System.out.println("今天星期六。");
break;
case 'g' :
System.out.println("今天周日。");
break;
default:
System.out.println("没有相关信息");
break;
}
}
}
package lfx250218;
import java.util.Scanner;
public class switch02 {
//使用switch把小写类型的char转化为大写(键盘输入) 只转化a b c d
//其他输出other
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
char c1=myScanner.next().charAt(0);
switch (c1){
case 'a':
System.out.println('A');
break;
case 'b':
System.out.println('B');
break;
case 'c':
System.out.println('C');
break;
case 'd':
System.out.println('D');
break;
case 'e':
System.out.println('E');
break;
default:
System.out.println("other");
break;
}
}
}
package lfx250218;
import java.util.Scanner;
public class switch03 {
//对于学生成绩大于60分的 输出“合格”
// 低于60分的 输出“不合格”
//注意; 输出的成绩不能大于六十
public static void main(String[] args) {
//定义一个输入对象
Scanner myScanner=new Scanner(System.in);
//定义一个成绩变量
int score= myScanner.nextInt();
//判断成绩在0到100 这个范围内用if语句
if (score>=0&&score<=100) {
//先判断输入的成绩是否正确
int s1 = (int) (score / 60);
switch (s1) {
case 1:
System.out.println("合格");
break;
case 0:
System.out.println("不合格");
break;
default:
System.out.println("输入有错误");
break;
}
}
}
}
package lfx250218;
import java.util.Scanner;
public class switch04 {
//根据用于指定月份 打印该月份所属的季节 3 4 5 春季 6 7 8 夏季 9 10 11秋季
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
int month= myScanner.nextInt();
if (month>=1&&month<=12){
switch (month){
case 3|4|5:
System.out.println("春季");
break;
case 6|7|8:
System.out.println("夏季");
break;
case 9|10|11:
System.out.println("秋季");
break;
default:
System.out.println("冬季");
break;
}
}else {
System.out.println("输入信息错误");
}
}
}
- 电脑内存单位的基本换算【背】【呃呃呃我不会,所以背一下吧】
1 千字节(KB) = 1024 字节(Byte),即 1KB = B = 1024B。
1 兆字节(MB) = 1024 千字节(KB),即 1MB = B = 1024KB = 1024×1024B 。
1 吉字节(GB) = 1024 兆字节(MB),即 1GB = B = 1024MB = 1024×1024KB = 1024×1024×1024B。
1 太字节(TB) = 1024 吉字节(GB),即 1TB = B = 1024GB 。
1 拍字节(PB) = 1024 太字节(TB),即 1PB = B = 1024TB 。
1 艾字节(EB) = 1024 拍字节(PB),即 1EB = B = 1024PB