一、运算符
1、概述
执行特定的数学或逻辑等操作的符号,+,-,*,/,%,==,!=,&&,||,?:,=,>>,<<等等
按照参与运算元素的个数可以分为单目运算符、双目运算符、三目运算符
单目运算符、赋值运算符、三目运算符计算方向从右到左运算
/**
* @document:运算符介绍
* @Author:SmallG
* @CreateTime:2023/7/20+10:47
*/
public class OperatorDemo {
public static void main(String[] args) {
//运算符的优先级
int a = 4 + 6 / 2 + 8 * 2;
System.out.println(a); //23 先算乘除后算加减
//运算符的优先级相同,按照从左到右的顺序依次运算
int b = 1 + 2 + 3 + 4;
System.out.println(b); //10
//采用括号调整运算顺序
int c = 100 * (2 + 100);
System.out.println(c); //10200
}
}
2、算术运算符(7个)
- 相同的数据类型参与运算,数据类型不变
- 参与数学运算的数据类型不一致,会就近自动转换数据类型,然后进行计算
- byte、short、int、long按照int类型进行数学计算
算术四则运算案例:
/**
* @document:算术四则运算
* @Author:SmallG
* @CreateTime:2023/7/20+10:57
*/
public class ArithmeticDemo {
public static void main(String[] args) {
//一般情况
int a = 50;
int b = 100;
int c = a + b;
System.out.println(c); //150
//溢出问题
a = Integer.MAX_VALUE;
b = 1;
c = a + b;
System.out.println(c); //-2147483648
//解决溢出问题 采用更大范围的类型
long l = a + b;
System.out.println(l); //-2147483648
//仍然会产生溢出,因为两个int类型的变量计算后还是int,计算后再赋值给l
//解决措施:将两个int类型的变量其中之一转变为long类型即可
//整除
a = 9;
b = 2;
c = a / b;
System.out.println(c); //4
//浮点数除法
double d = (double) a / b;
System.out.println(d); //4.5
//byte short char 在运算的过程中会自动转换为int类型
byte b1 = 5;
short s1 = 6;
//short s2 = b1 + s1; //报错,计算结果是int类型
int i1 = b1 + s1;
System.out.println(i1); //11
//单纯的byte类型不会报错,3和100的字面量是int类型
// 计算结果没有超过byte的表示范围,允许赋值
byte b2 = 3 + 100;
System.out.println(b2);
//byte b3 = 100 + 100; 报错 两个数的计算结果超出byte的范围
}
}
取余数运算案例:
/**
* @document: 取余运算(取模运算)
* @Author:SmallG
* @CreateTime:2023/7/20+11:30
*/
public class RemainderDemo {
public static void main(String[] args) {
System.out.println(5 % 3); //2
System.out.println(-5 % 3);//-2
System.out.println(0 % 3); //0
}
}
自增/自减运算实例:
/**
* @document: 自增/自减运算
* @Author:SmallG
* @CreateTime:2023/7/20+11:48
*/
public class IncrementDemo {
public static void main(String[] args) {
int i = 1;
int b = i++;
System.out.println(b); //1
System.out.println(i); //2
i = 1;
int c = ++i;
System.out.println(c); //2
System.out.println(i); //2
i =1;
System.out.println(i--); //1
System.out.println(i); //0
}
}
3、关系运算符(6个)
用于比较数值的大、小、相等关系,==,!=,>,>=,<,<=,结果是boolean类型
关系运算符案例:
/**
* @document: 关系运算符 判断两个数的大小关系
* @Author:SmallG
* @CreateTime:2023/7/20+11:57
*/
public class RelationalDemo {
public static void main(String[] args) {
int age = 5;
System.out.println(age > 12); //false
System.out.println(age >= 12); //false
System.out.println(age < 12); //true
System.out.println(age <= 12); //true
System.out.println(age == 5); //true
System.out.println(age != 5); //false
}
}
4、逻辑运算符(3个)
逻辑与&&,逻辑或||,逻辑非!
java的双目逻辑运算符&&和||都是按照短路规则执行(在逻辑与中第一个运算假直接跳过第二个运算)
闰年判断案例:
/**
* @document: 闰年判断
* @Author:SmallG
* @CreateTime:2023/7/20+14:09
*/
public class LogicalDemo1 {
public static void main(String[] args) {
//创建组件的对象
Scanner scanner = new Scanner(System.in);
System.out.print("请输入年份:");
//创建年份对象
int year = scanner.nextInt();
if (year % 400 == 0 || (year % 4 == 0) && (year % 100 != 0)) {
System.out.println(true);
}
else{
System.out.println(false);
}
}
}
短路与和短路或案例:
/**
* @document: 短路与,第一个条件为假则第二个条件不执行
* @Author:SmallG
* @CreateTime:2023/7/20+14:35
*/
public class LogicalDemo2 {
public static void main(String[] args) {
int i = 10;
boolean b = i > 100 && i++ > 100;
System.out.println(b); //false
System.out.println(i); //10
boolean b2 = i < 100 && i++ < 100;
System.out.println(b2);//true
System.out.println(i); //11 第一个条件满足,会执行第二个条件
boolean b3 = i < 100 || i++ < 100;
System.out.println(b3); //true
System.out.println(i); //11 短路或,第一个条件为真,不再运行第二个条件
boolean b4 = i > 100 || i++ < 100;
System.out.println(b4); //true
System.out.println(i); //12 第一个条件为假,执行第二个条件
}
}
5、赋值运算符(=)
/**
* @document: 赋值运算符
* @Author:SmallG
* @CreateTime:2023/7/20+15:06
*/
public class AssignmentDemo2 {
public static void main(String[] args) {
int a, b, c, d;
a = b = c = d = 20;
//从右到左依次执行
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
}
}
/**
* @document: 复合赋值运算:+=,-=,*=,/=,%=
* @Author:SmallG
* @CreateTime:2023/7/20+15:12
*/
public class AssignmentDemo3 {
public static void main(String[] args) {
int i = 1;
i += 5;
System.out.println(i); //6
i = 10;
i -= 5;
System.out.println(i); //5
//自动执行强制类型转换
i += 5.5; //算出的结果是10.5,然后相当于 i =(int) i+5.5;变为整型
System.out.println(i); //10
}
}
6、字符串连接运算符
/**
* @document: 字符串连接 +
* @Author:SmallG
* @CreateTime:2023/7/20+15:25
*/
public class StringDemo {
public static void main(String[] args) {
System.out.println(5 + 5.5); //执行加法运算 10.5
System.out.println("5" + 5.5); //55.5字符串
int i = 10;
System.out.println("i + 10的和是:" + i + 10); //i + 10的和是:1010(从左到右)
}
}
7、三目运算符(三元运算符)
/**
* @document: 三目运算符
* @Author:SmallG
* @CreateTime:2023/7/20+15:32
*/
public class TernaryDemo {
public static void main(String[] args) {
/*
三目运算符结构:
boolean表达式? 表达式1 : 表达式2
程序先执行boolean表达式 如果为true ->表达式1
如果为false ->表达式2
*/
//键盘输入两个数字,选出最大值
Scanner scanner = new Scanner(System.in);
System.out.print("请输入两个数字:");
int a = scanner.nextInt();
int b = scanner.nextInt();
int max = a > b ? a : b;
System.out.println("两个数字的最大值为:"+max);
}
}
二、分支流程控制
/**
* @document: if单路分支,输入商品的总价,如果总价满足不小于500 八折优惠
* @Author:SmallG
* @CreateTime:2023/7/20+16:12
*/
public class IfDemo1 {
public static void main(String[] args) {
//输入总价
Scanner scanner = new Scanner(System.in);
System.out.print("请输入商品总价:");
double total = scanner.nextDouble();
System.out.println("原价:"+total);
if (total >= 500) {
total *= 0.8;
}
System.out.println("付款金额:"+total);
}
}
/**
* @document: 双路分支 if else
* @Author:SmallG
* @CreateTime:2023/7/20+16:24
*/
public class IfDemo2 {
public static void main(String[] args) {
/*
输入商品总价
如果商品总价不小于500 八折优惠 否则九折优惠
输出付款金额
*/
Scanner scanner = new Scanner(System.in);
System.out.print("请输入总价:");
double total = scanner.nextDouble();
System.out.println("原价:" + total);
if (total >= 500) {
total *= 0.8;
} else {
total *= 0.9;
}
System.out.println("应付金额:" + total);
}
}
/**
* @document: if else if 多路分支
* @Author:SmallG
* @CreateTime:2023/7/20+16:32
*/
public class IfDemo3 {
public static void main(String[] args) {
/*
输入商品的总价:
如果商品总价大于等于800-----------7折
如果商品总价小于800大于等于500-----8折
如果商品总价小于500大于等于200-----9折
如果总价小于200-------------------95折
*/
Scanner scanner = new Scanner(System.in);
System.out.print("请输入商品总价:");
double total = scanner.nextDouble();
if (total<0){
System.out.println("输入有误,请输入正确的商品总价!");
}else{
System.out.println("原价:" + total);
int index = -1;
if (total >= 800) {
total *= 0.7;
} else if (total >= 500 && total < 800) {
total *= 0.8;
} else if (total >= 200 && total < 500) {
total *= 0.9;
} else if (total >= 0 && total < 200) {
total *= 0.95;
}
System.out.println("应付金额:" + total);
}
}
}
/**
* @document: switch case分支
* @Author:SmallG
* @CreateTime:2023/7/20+17:12
*/
public class SwitchDemo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入分数:");
int score = scanner.nextInt();
switch (score/10){
case 10:
case 9:
System.out.println("A");
break;
case 8:
System.out.println("B");
break;
case 7:
case 6:
System.out.println("C");
break;
//在switch里面default相当于if里面的else
default:
System.out.println("D");
}
}
}
/**
* @document: switch表达式(java12新特性)
* @Author:SmallG
* @CreateTime:2023/7/20+17:35
*/
public class SwitchDemo02 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入分数:");
int score = scanner.nextInt();
switch (score / 10) {
case 10, 9 -> System.out.println("A");
case 8 -> System.out.println("B");
case 7, 6 -> System.out.println("C");
default -> System.out.println("D");
}
}
}