一边回顾一边分享
知识点1:算术运算符
/*
1. 测试算术运算符的使用
+ - + - * / % (前)++ (后)++ (前)-- (后)-- +
*/
class AriTest {
public static void main(String[] args) {
//测试:/
int m1 = 12;
int m2 = 5;
int m3 = m1 / m2 * m2;
System.out.println("m3 = " + m3);//10
double m4 = (double)m1 / m2;
System.out.println("m4 = " + m4);//2.4
double m5 = m1 / (m2 + 0.0);
System.out.println("m5 = " + m5);//2.4
//#####补充######
byte bb1 = 10;
int i1 = (int)bb1;
char c1 = 'a';
System.out.println((int)c1);//97
//###########
//测试: %
//运算结果的符号与被模数一致。
System.out.println(12 % 5);
System.out.println(12 % -5);
System.out.println(-12 % 5);
System.out.println(-12 % -5);
//测试:(前)++ (后)++
//(前)++ : 先自增1,再运算
//(后)++ : 先运算,后自增1
int a1 = 10;
int b1 = a1++;
System.out.println("a1 = " + a1);//11
System.out.println("b1 = " + b1);//10
int a2 = 10;
int b2 = ++a2;//(前)++
System.out.println("a2 = " + a2);//11
System.out.println("b2 = " + b2);//11
//################
short s1 = 10;
//s1++;//自增1
++s1;
System.out.println("s1 = " + s1);//11
short s2 = 10;
//s2 = s2 + 1;//编译不通过
s2 = (short)(s2 + 1);
System.out.println("s2 = " + s2);//11
//测试:(前)-- (后)--
//(前)-- : 先自减1,再运算
//(后)-- : 先运算,后自减1
int ii1 = 10;
//(ii1++)++;//编译不通过
}
}
知识点2:赋值运算符
/*
2. 赋值运算符:
= += -= *= /= %=
*/
class SetValueTest {
public static void main(String[] args) {
//赋值运算符: =
int a = 10;
int b = 10;
int a1,a2;
a1 = a2 = 10;//连续赋值
System.out.println("a1 = " + a1);
System.out.println("a2 = " + a2);
int a3 = 10,a4 = 20;
System.out.println("a3 = " + a3);
System.out.println("a4 = " + a4);
// +=
int m = 10;
m += 5;//类似:m = m + 5
System.out.println("m = " + m);//15
m %= 8;//类似:m = m % 8
System.out.println("m = " + m);//7
//####特别的#######
short s1 = 10;
s1 += 5;//类似:s1 = (short)( s1 + 5)
System.out.println("s1 = " + s1);
//总结:开发中如果需要变量自增2。建议使用: += 2。 而不是使用 + 2。
//######################
int i = 10;
i += 5.0;
System.out.println("i = " + i);//15
//####################
//练习1:
int m1 = 2;
int n1 = 3;
n1 *= ++m1; //n1 = n1 * ++m1
System.out.println("m1=" + m1);//3
System.out.println("n1=" + n1);//9
//练习2:
int n3 = 10;
n3 += (n3++) + (++n3); //n3 = n3 + (n3++) + (++n3)
System.out.println(n3);//32
//练习3:
int k = 0,j = 0;
j += k *= j += (k = 1) / (j = 1); //j = j + (k = k * (j = j + ((k = 1) / (j = 1))))
System.out.println(j);//0
// 2 + 4 * (3 + 6) * 7
k = 0;j = 0;
j += ++k + (++k + j);
System.out.println(j);//3
}
}
知识点3:比较运算符
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IGzC01aC-1625660637707)(assets/1595580544883.png)]
/*
3. 比较运算符的使用:
== != > < >= <= instanceof(暂时不讲)
说明:
1:运算的结果是boolean类型
2:区分 == 和 =
*/
class CompareTest {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println(a == b);//false
System.out.println(a = b);//20
boolean b1 = false;
boolean b2 = true;
System.out.println(b1 == b2);//false
System.out.println(b1 = b2);//true
}
}
知识点4:逻辑运算符
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pn1jN1sx-1625660637709)(assets/1595580576778.png)]
/*
4. 逻辑运算符的使用
& && | || ! ^
说明:
1:操作的是boolean类型变量
2:运算的结果也是boolean类型
3. 区分 & 与 &&
区分 | 与 ||
*/
class LogicTest {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
System.out.println("a & b : " + (a & b));
System.out.println("a && b : " + (a && b));
System.out.println("a | b : " + (a | b));
System.out.println("a || b : " + (a || b));
System.out.println("a ^ b : " + (a ^ b));
System.out.println("!a : " + !a);
//& 与 && 相同点:当符号左边是true时,此时都需要执行符号右边的操作
//& 与 && 不同点:&:当符号左边是false时,仍然执行符号右边的操作。 &&:当符号左边是false时,不再执行符号右边的操作
//开发中,建议使用&&
boolean b1 = true;
b1 = false;
int m1 = 10;
if(b1 & (m1++ > 0)){
System.out.println("执行if结构");
}else{
System.out.println("执行else结构");
}
System.out.println("m1 = " + m1);//11
boolean b2 = true;
b2 = false;
int m2 = 10;
if(b2 && (m2++ > 0)){
System.out.println("执行if结构");
}else{
System.out.println("执行else结构");
}
System.out.println("m2 = " + m2);//10
//################################
//| 与 || 的相同点:当符号左边是false时,此时都需要执行符号右边的操作
//| 与 || 的不同点:|:当符号左边是true时,仍然执行符号右边的操作。 ||:当符号左边是true时,不再执行符号右边的操作
//开发中,建议使用||
boolean b3 = false;
b3 = true;
int m3 = 10;
if(b3 | (m3++ > 0)){
System.out.println("执行if结构");
}else{
System.out.println("执行else结构");
}
System.out.println("m3 = " + m3);
//
boolean b4 = false;
b4 = true;
int m4 = 10;
if(b4 || (m4++ > 0)){
System.out.println("执行if结构");
}else{
System.out.println("执行else结构");
}
System.out.println("m4 = " + m4);
}
}
知识点5:位运算符
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K3zNusFF-1625660637710)(assets/1595580636358.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F3MNOzy2-1625660637712)(assets/1595580709858.png)]
/*
5. 位运算符的使用:
<< >> >>> & | ^ ~
说明:
<< : 针对于整数,不管是正数还是负数,在一定范围内,只要向左移动一位,就相当于 * 2
>> : 针对于整数,不管是正数还是负数,在一定范围内,只要向右移动一位,就相当于 / 2
经典的笔试题:以最高效的方式计算2 * 8
2 << 3 或 8 << 1
*/
class BitTest {
public static void main(String[] args) {
System.out.println("7 << 1 : " + (7 << 1));//14
System.out.println("7 << 2 : " + (7 << 2));//28
System.out.println("7 << 3 : " + (7 << 3));//56
System.out.println("-7 << 3 : " + (-7 << 3));//-56
System.out.println("7 << 28 : " + (7 << 28));
System.out.println("7 << 29 : " + (7 << 29));
System.out.println("7 >> 1 : " + (7 >> 1));//3
System.out.println("-7 >> 1 : " + (-7 >> 1));//-4
//需求:交换两个变量的值
int m = 10;
int n = 20;
System.out.println("m = " + m + ", n = " + n);
//交换两个变量的操作:
//方式一:更通用。
int temp = m;
m = n;
n = temp;
//方式二:
//m = m + n;
//n = m - n;
//m = m - n;
//方式三:
//m = m ^ n;
//n = m ^ n;
//m = m ^ n;
System.out.println("m = " + m + ", n = " + n);
}
}
- 其它举例
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dz6J296T-1625660637713)(assets/1595580788296.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O2vxOt0p-1625660637714)(assets/1595580795747.png)]
知识点6:三元运算符
/*
6.三元运算符的测试
格式: (条件表达式)? 表达式1 : 表达式2
说明:
1. 条件表达式是boolean类型
2. 如果条件表达式为true,则返回表达式1;
如果条件表达式为false,则返回表达式2;
3. 要求表达式1和表达式2要一致。
4. 能使用三元运算符的地方,都可以改写为if-else。反之,使用if-else不一定可以改写为三元运算符。
5. 在能使用三元运算符和if-else的时候,建议使用三元运算符。因为三元运算符执行效率稍高。
*/
class SanYuanTest {
public static void main(String[] args) {
//练习1:获取两个数的较大值
int m = 20;
byte n = 20;
int max = (m > n)? m : n;
System.out.println("m和n的较大值为:" + max);
//编译失败
//String max1 = (m > n)? m : "n大";
//练习2:
String maxStr = (m > n)? "m大" : ((m == n)? "相等" : "n大");
System.out.println(maxStr);
//练习3:获取三个数的最大值
int a1 = 10,a2 = 20,a3 = 5;
int max1 = (a1 > a2)? a1 : a2;
int max2 = (max1 > a3)? max1 : a3;
//或
//int max2 = (((a1 > a2)? a1 : a2) > a3)? ((a1 > a2)? a1 : a2) : a3;
System.out.println("最大值为:" + max2);
//#########################
if(m > n){
System.out.println(m);
}else{
System.out.println(n);
}
}
}
知识点7:运算符的优先级
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h91bn2Yx-1625660637714)(assets/1595580908536.png)]
-
说明:上图大家不用记忆。
-
如果大家开发中需要连续使用多个运算符,则考虑使用()标识优先级较高的结构
知识点8:分支结构1:if-else
- 基本使用
/*
一、流程控制分为三类结构:顺序结构、分支结构、循环结构
二、分支结构1:if-else
1.格式1:
if(条件表达式){
执行语句1;
}
2.格式2:“二选一”
if(条件表达式){
执行语句1;
}else{
执行语句2;
}
3.格式3:“多选一”
if(条件表达式1){
执行语句1;
}else if(条件表达式2){
执行语句2;
}else if(条件表达式3){
执行语句3;
}
....
else{
执行语句2;
}
*/
class IfTest {
public static void main(String[] args) {
int heartBeats = 80;
if(heartBeats < 60 || heartBeats > 100){
System.out.println("你需要做进一步的检查");
}
System.out.println("体检结束");
//############二选一################
int age = 23;
if(age >= 22){
System.out.println("你已经到了合法的结婚年龄");
}else{
System.out.println("你只能先谈谈恋爱~~");
}
//############多选一################
int myAge = 12;
if(myAge < 0 || myAge > 150){
System.out.println("你输入的数据不合法~~");
}else if(myAge < 6){
System.out.println("婴幼儿时期");
}else if(myAge < 25){
System.out.println("青少年时期");
}else if(myAge < 60){
System.out.println("壮年时期");
}else{
System.out.println("老年时期");
}
System.out.println("执行结束");
}
}
- 例题
/*
岳小鹏参加Java考试,他和父亲岳不群达成承诺:
如果:
成绩为100分时,奖励一辆BMW;
成绩为(80,99]时,奖励一台iphone xs max;
当成绩为[60,80]时,奖励一个 iPad;
其它时,什么奖励也没有。
请从键盘输入岳小鹏的期末成绩,并加以判断
说明1:
如果多个条件表达式彼此之间是“互斥”关系(即:没有交集),则哪个条件表达式声明在上面,哪个条件表达式声明在下面都可以。
如果多个条件表达式彼此之间是“包含”关系,则需要将条件表达式范围小的声明在条件表达式范围大的上面。
说明2:如果if-else结构中的某一个if或else if 或 else只有一行执行语句,则可以省略其一对{}。但是,不建议省略
*/
import java.util.Scanner;
class IfTest1{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入岳小鹏的期末成绩:");
int score = scan.nextInt();
if(score == 100){
System.out.println("奖励一台BMW");
}else if(score > 80){//
System.out.println("奖励一台iphone xs max");
}else if(score >= 60 ){//
System.out.println("奖励一个 iPad");
}else{
System.out.println("奖励一本参考书");
}
}
}
知识点9:Scanner的使用
/*
1. 需求:如何从键盘获取不同类型的数据
2. 使用Scanner来实现。
3. 操作步骤:
① 导包:import java.util.Scanner;
② 实例化Scanner: Scanner scan = new Scanner(System.in);
③ 根据需要获取的变量的类型,调用相关的方法即可。
*/
//① 导包:
import java.util.Scanner;
class ScannerTest {
public static void main(String[] args) {
//② 实例化Scanner:
Scanner scan = new Scanner(System.in);
//③ 根据需要获取的变量的类型,调用相关的方法即可。
System.out.println("请输入你的姓名:");
String name = scan.next();
System.out.println("name = " + name);
System.out.println("请输入你的年龄:");
int age = scan.nextInt(); //类似:nextByte() / nextShort() / nextLong()
System.out.println("age = " + age);
System.out.println("请输入你的体重:");
double weight = scan.nextDouble(); //类似:nextFloat()
System.out.println("weight = " + weight);
System.out.println("婚否:(true/ false)");
boolean isMarried = scan.nextBoolean();
System.out.println("isMarried = " + isMarried);
//获取字符型
System.out.println("请输入你的性别:");
String gender = scan.next();
char charGender = gender.charAt(0);//获取字符串指定索引为0位置上的字符
System.out.println("gender = " + charGender);
}
}
= scan.nextInt(); //类似:nextByte() / nextShort() / nextLong()
System.out.println("age = " + age);
System.out.println("请输入你的体重:");
double weight = scan.nextDouble(); //类似:nextFloat()
System.out.println("weight = " + weight);
System.out.println("婚否:(true/ false)");
boolean isMarried = scan.nextBoolean();
System.out.println("isMarried = " + isMarried);
//获取字符型
System.out.println("请输入你的性别:");
String gender = scan.next();
char charGender = gender.charAt(0);//获取字符串指定索引为0位置上的字符
System.out.println("gender = " + charGender);
}
}