文章目录
运算符,分支结构和循环结构
1. 运算符
1.1 自增自减运算符【逐渐淘汰】
自增自减运算符有且只能操作变量!!!
++:
作用:操作的变量自增1 ==> += 1
--:
作用:造作的变量自减1 ==> -= 1
Swift Apple 已经淘汰自增自减运算符,完全使用 += 1 和 -= 1替换
自增自减运算符
在变量前 首先执行自增自减操作,再来执行对应的语句
在变量后 首先执行所在行语句,再来执行自增自减操作
【建议】
1. 尽量使用 += 1 和 -= 1 替换对应的自增自减运算符
2. 如果非要使用自增自减运算符,尽量单独成行,减少代码中的歧义,增强代码的阅读性
1.2 自增自减运算符不得不说的面试题
int num = 5;
int ret = num++ * ++num;
ret = ?; 35
num = ?; 7
int num = 10;
++(++num);
num = ?
语法错误
小括号对外数据是一个整体,等价于小括号里面的内容是一个常量,自增自减运算符,不可以操作常量
1.3 逻辑运算符
与
&&
保险库的门
顾客有一把钥匙,保管员有一把钥匙,双方同时到场才可以打开,缺一不可
同真为真,有假【即】假
或
||
自己家门
有一个人带有钥匙就可以开门
有真【即】真,同假为假
非
!
强牛 犟
取反,你说对,我就说错,你说错,我就说真,杠精!!!
1.4 逻辑运算符的断路原则问题
class Demo5 {
public static void main(String[] args) {
int num = 5;
boolean ret = num >= 10 && num++ < 10;
/*
逻辑与断路原则:
逻辑与中同真为真,有假【即】假,如果在逻辑与表达式中,一旦
出现一个false条件,从false条件开始,之后的表达式是没有任何
作用的,计算机为了保证效率问题,不再执行之后的代码。
*/
System.out.println("ret : " + ret); // false
System.out.println("num : " + num); // 5 or 6
int num1 = 10;
boolean ret1 = num1 > 5 || num1++ > 100;
/*
逻辑或断路原则:
逻辑或中有真【即】真,同假为假,如果在逻辑或表达式中,一旦
出现一个true条件,从true条件开始,之后的表达式是没有任何
作用的,计算机为了保证效率问题,不再执行之后的代码。
*/
System.out.println("ret1 : " + ret1); // true
System.out.println("num1 : " + num1); // 10
}
}
课堂小练习
1. 使用关系运算符,逻辑运算符,写出一个判断一个字符是不是大写英文字母的条件
char ch;
'A' <= ch <= 'Z'; ×
ch >= 'A' && ch <= 'Z';
2. 使用关系运算符,逻辑运算符,写出一个判断一个字符是不是英文字母的条件
char ch;
A ~ z
(ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z')
3. 使用关系运算符,逻辑运算符,写出一个判断一个字符是不是数字字符的条件
char ch;
ch >= '0' && ch <= '9';
4. 使用关系运算符,逻辑运算符,写出一个闰年判断条件
闰年:
能被4整除,但是不能被100整除
或者能被400整除
int year;
(year % 4 == 0 && year % 100 != 0) || year % 400 == 0
要求:
只允许使用字符本身!!!
2. 分支结构【重点】
2.1 开发中的常用结构
顺序结构
代码从上之下执行运行
分支结构
代码在不同的条件下,执行的不同的运行操作,得到不同的结果
循环结构
存在复用代码可以利用循环来简化一定的结构
2.2 if 分支结构
2.2.1 if
if (/* 判断条件 true or false */) {
// 执行语句
}
/*
执行流程:
如果代码执行到if分支结构,首先判断if之后的小括号内容是否为true,如果为执行,执行大括号里面的语句,如果为false,执行大括号之外的语句
*/
2.2.2 if else
if (/* 判断条件 true or false */) {
// true语句体
} else {
// false语句体
}
/*
执行流程:
如果代码运行到if else分支结构,首先判断if之后的条件是否为true,如果为true,执行if大括号内true语句体,如果为false,执行else大括号里面的false语句体
*/
2.2.3 if else - if
if (/* 匹配条件1 */) {
// 处理方式1
} else if (/* 匹配条件2 */) {
// 处理方式2
} else if (/* 匹配条件3 */) {
// 处理方式3
} else {
// 最终处理方式
}
/*
执行流程:
当程序执行到if else if结构时,匹配if之后的条件,找到第一个匹配的if条件之后,执行对应的处理方式,如果没有任何一个if条件匹配,执行else里面的处理方式
注意: 最后的else 可以省略!!!
90 ~ 100 秀儿
80 ~ 90 良儿
70 ~ 80 中儿
60 ~ 70 过儿
60以下
让你爹穿着拖鞋来学校一趟
*/
【补充知识点 从键盘上获取用户输入的数据】
基本的Java代码中是没有从键盘上获取数据的能力
1. 导包
在class之前,输入
import java.util.Scanner;
2. 创建对应Scanner的变量
Scanner sc = new Scanner(System.in);
3. 常用方法,复制粘贴
int num = sc.nextInt(); 从键盘上获取用户输入的int类型数据
float num = sc.nextFloat(); 从键盘上获取用户输入的float类型数据
char ch = sc.nextLine().charAt(0); 从键盘上获取用户输入的一个char类型数据
【补充知识点 用户体验问题】
在实际开发中,我们的程序需要考虑用户体验和用户友好性,从而建立足够的用户粘性。
用户如果体验不好,你们的软件就没有任何的价值!!!
【补充知识点 用户输入数据合法性判断问题】
实际使用情况下用户输入的数据需要进行合理化判断,如果用户输入的数据是不合理的, 不要进行正常的业务流程,
例如:
用户输入的学生成绩超出了0 ~ 100
用户登录账号,密码或者账号错误
2.3 switch case 分支结构
switch (/* 一个变量 */) {
case 常量1:
处理方式1;
break;
case 常量2:
处理方式2;
break;
case 常量3:
处理方式3;
break;
case 常量4:
处理方式4;
break;
default:
最终处理方式;
break;
}
/*
执行流程:
当程序运行到switch case结构之后,首先使用switch之后的变量,匹配case之后的常量,找到对应的处理方式,如果没有任何一个case匹配变量对应的数值,则采用default方式处理。
switch case 使用注意事项:
1. 在switch case结构中,有且只能执行case,或者default之后的语句,如果语句不在这两者范围以内是无效代码。Java开发,不允许废话。
2. 在switch case结构中,不允许出现相同的case选项
3. 在switch case结构中,break可以省略,如果执行了缺少break的case或者default选择,代码会继续执行,到下一个break或者大括号结束。这里可以利用省去break结构的方式,整合一些相同处理方式的选项。
4. 在switch case结构中,default选择可以省略,不影响正常的逻辑,只是缺少了一种在非指定条件下的处理方式。这里需要根据实际的业务需求来作出选择。
*/
3. 循环结构
3.1 while循环
while (/* 循环条件判断 true or false */) {
// 循环体
// (循环条件变更)
}
/*
执行流程:
当程序运行到while循环结构时,首先判断while小括号里面的内容是否为true,如果为true,执行循环体,在回到while判断,直到条件为false,终止循环
*/
际的业务需求来作出选择。
*/
#### 3. 循环结构
##### 3.1 while循环
```java
while (/* 循环条件判断 true or false */) {
// 循环体
// (循环条件变更)
}
/*
执行流程:
当程序运行到while循环结构时,首先判断while小括号里面的内容是否为true,如果为true,执行循环体,在回到while判断,直到条件为false,终止循环
*/