day_04:判断和循环
一、顺序结构
略
二、分支结构
1. if语句
格式一:
java
if (关系表达式) {
语句体;
}注意点:
- 大括号的开头可以另起一行书写,但是建议写在第一行的末尾
- 在语句体中,如果只有一句代码,大括号可以省略不写
- 如果对一个布尔类型的变量进行判断,不要用==号
格式二:
java
if (关系表达式) {
语句体;
} else {
语句体;
}格式三:
java
if (关系表达式1){
语句体1;
} else if (关系表达式2){
语句体2;
}
......
else {
语句体n+1;
}2. switch
java
switch(表达式) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
......
default:
语句体n+1;
break;
}执行流程:
- 首先计算表达式的值;
- 依次和
case后面的值进行比较,如果有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束; - 如果所有的
case后面的值和表达式的值都不匹配,就会执行default里面的语句体,然后结束整个switch语句。
格式说明:
- 表达式:(将要匹配的值)取值为
byte、short、int、char。JDK5以后可以是枚举,JDK7以后可以是String; case:后面跟的是要和表达式进行比较的值(被匹配的值);break:表示中断,结束的意思,用来结束switch语句;default:表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似;case:给出的值不允许重复;case:后面的值只能是字面量,不能是变量。
default的位置和省略
- 位置:
default不一定是写在最下面的,我们可以写在任意位置。只不过习惯会写在最下面 - 省略:
default可以省略,语法不会有问题,但是不建议省略。
case穿透
就是语句体中没有写break导致的。
执行流程:
- 首先还是会拿着小括号中表达式的值跟下面每一个
case进行匹配; - 如果匹配上了,就会执行对应的语句体,如果此时发现了break,那么结束整个
switch语句; - 如果没有发现
break,那么程序会继续执行下一个case的语句体,一直遇到break或者右大括号为止。
使用场景:
- 如果多个
case的语句体重复了,那么我们考虑利用case穿透去简化代码。
switch新特性
java
switch (number){
case 1 ->{
System.out.println("一");
}
case 2 ->{
System.out.println("二");
}
case 3 ->{
System.out.println("三");
}
default ->{
System.out.println("无");
}
}java
switch (number){
case 1 -> System.out.println("一");
case 2 -> System.out.println("二");
case 3 -> System.out.println("三");
default -> System.out.println("无");
}switch和if第三种格式各自的使用场景
if:一般用于对范围的判断 switch:把有限个数据一一列举出来,任选其一
三、循环结构
1. for循环
格式:
java
for(初始化语句;条件判断语句;条件控制语句){
循环体语句;
}注意
求和的变量不能定义在循环的里面,因为变量只在所属的大括号中有效,如果我们把变量定义在循环的里面,那么当前变量只能在本次循环中有效,当本次循环结束之后,变量就会从内存中消失,第二次循环开始的时候,又会重新定义一个新的变量。
2. while循环
格式:
java
初始化语句;
while(条件判断语句) {
循环体语句;
条件控制语句;
}3. do......while
格式:
java
初始化语句;
do{
循环体语句;
条件控制语句;
}while(条件判断语句);特点:
先执行后判断。
4. for和while对比
- 相同点:运行规则都是一样的;
- 不同点:
for循环中:知道循环次数或者循环的范围;while循环:不知道循环的次数和范围,只知道循环的结束条件。
附:练习题
需求:给你一个整数x,如果x是一个回文整数,打印
true,否则,返回false(回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121是回文,而123不是)。java//定义两个变量存储数字和原始值 Scanner sc = new Scanner(System.in); while (true) { System.out.println("请输入一个整数:"); int x = sc.nextInt(); int tep = x; //定义一个变量存储倒后结果 int sum = 0; while (x != 0) { //获取个位数 int ge = x % 10; //对原有数字进行处理 x = x / 10; //添加倒后结果 sum = sum * 10 + ge; } //输出结果 System.out.println(sum == tep); }需求:给定两个整数,被除数和除数(都是正数,且不超过int的范围),将两数相除(不使用乘法、除法和%运算符),得到商和余数。
java//定义被除数 int dividend = 100; //定义除数 int divisor = 10; //定义变量记录循环次数即商 int num = 0; //while循环 while (dividend >= divisor) { //被除数减除数 dividend -= divisor; //统计变量自增一次 num++; } //结果输出 System.out.println("商为:" + num); System.out.println("余数为:" + dividend);