算数运算符
+ - * / %
运算符:对常量或者变量进行操作的符号
表达式:用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式。
不同运算符连接的表达式体现的是不同类型的表达式。
int a = 10;
int b = 20;
int c = a + b
+:是运算符,并且是算术运算符
a + b:是表达式,由于+是算术运算符,所以这个表达式叫算术表达式
整数相除结果只能得到整数,如果想得到小数,需要有小数参与运算
% 获取的是两个数据做除法的余数
•需求:键盘录入一个三位数,求这个三位数每一位的数字和。
package com.wanxi.exercises;
//键盘录入一个三位数,求这个三位数每一位的数字和。
//1、提示用户键盘输入一个三位数
//2、获取用户输入的数据num
//3、 定义变量ge、shi、bai分为个位数、十位数、百位数
//4、定义变量theAnd为数字和。
import java.util.Scanner;
public class TheAnd {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个三位数:");//1、提示用户键盘输入一个三位数
int num = scanner.nextInt();//2、获取用户输入的数据num
int ge = num % 10;
int shi = num / 10 % 10;
int bai = num / 100 % 10;//3、 定义变量ge、shi、bai分为个位数、十位数、百位数
int theAnd = ge + shi +bai;
System.out.println("数字和为:" + theAnd);//4、定义变量theAnd为数字和。
scanner.close();
}
}
自增自减运算符
++ : 让变量自身的值 + 1操作
-- : 让变量自身的值 - 1操作
++在前: 先自增, 再操作
++在后: 先操作, 再自增
--同理
注意事项: 自增自减运算符, 只能操作变量, 不允许操作常量
数据类型转换
(1)隐式转换
介绍 : 将取值范围小的数据, 或变量, 赋值给另外一个取值范围大的变量, 允许直接赋值
简单记 : 小的给大的可以直接给
细节 : 这里所谓的小和大, 指的是取值范围
(2)强制转换
介绍 : 将取值范围大的数据或变量, 给取值范围小的变量赋值, 不允许直接赋值, 需要强转
简单记 : 大的给小的, 不允许直接给, 需要强转
建议 : 今后尽量减少强转的时候, [有可能] 会造成精度损失
package com.wanxi.test;
public class DateTypeChange {
public static void main(String[] args) {
byte num1 = 3;
byte num2 = 4;
byte num3 = (byte) (num1 + num2);//数据类型强制转化
System.out.println(num3);
byte num4 = 3 + 4;
System.out.println(num4);//3和4是两个常量, Java存在常量优化机制,编译成功
}
}
赋值运算符
基本赋值运算符 : =
扩展赋值运算符 : += , -= , *=, /=, %=
+= : 将符号左右两边的数据, 做加法运算, 将结果赋值给左边
其他的扩展赋值运算符,同理
细节 : 扩展赋值运算符, 底层自带强转效果
目标 : 能够使用扩展赋值运算符, 对代码进行优化
关系运算符
> >= < <= == !=
结论: 无论简单还是复杂, 结果都是boolean类型的true, false
注意: = 号和 == 号是有区别
= : 赋值操作
== : 比较操作
三元运算符
介绍 : 可以根据一个判断条件, 达成二者选其一
格式 : 判断条件 ? 值1 : 值2;
执行流程 :
执行判断, 看其返回结果是true, false
true : 值1就是最终结果
false : 值2就是最终结果
package com.wanxi.exercises;
//键盘录入三个整数,找出最大值并打印在控制台。
import java.util.Scanner;
public class MaxOfThree {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入第一个数:");
int num1 = scanner.nextInt();
System.out.print("请输入第二个数:");
int num2 = scanner.nextInt();
System.out.print("请输入第三个数:");
int num3 = scanner.nextInt();
int temp = num1 > num2 ? num1 : num2;
int theMax = num3 > temp ? num3 : temp;
System.out.println("最大的数是:" + theMax);
scanner.close();
}
}
7.三元运算符
代码层面 : 逻辑运算符连接 boolean 类型的表达式, 或者是值
&(与) : 并且, 遇false则false
|(或) : 或者, 遇true则true
!(非) : 取反
^(异或) : 相同为false, 不同为true
& : 没有短路效果, 无论符号左边是true, false, 右边都要继续执行
&& : 具有短路效果, 当符号左边为false的时候, 右边就不会执行了.
如果符号左边为true, 右边要继续执行
| : 没有短路效果, 无论符号左边是true, false, 右边都要继续执行
|| : 具有短路效果, 当符号左边为true的时候, 右边就不会执行了.
如果符号左边为false, 右边要继续执行
结论: 今后逻辑运算符, 最常用的&& || !
package com.wanxi.test;
/* 银行存取款操作流程, balance =0 为余额*/
/*
* -----ATM-------
* 1、存款
* 2、取款
* 3、显示余额
* 4、退出
* 请选择(1~4):
*/
import java.util.Scanner;
public class DoWhile2 {
public static void main(String[] args) {
double balance = 0.0;//定义变量,记录余额
boolean flag = true;
Scanner scan = new Scanner(System.in);
do {
System.out.println("-----ATM-------");
System.out.println(" 1、存款");
System.out.println(" 2、取款");
System.out.println(" 3、显示余额");
System.out.println(" 4、退出");
System.out.print("请输入你的选择(1~4): ");
int chose = scan.nextInt();
switch (chose) {
case 1:
System.out.print("请输入存款金额: ");
double money1 = scan.nextDouble();
if (money1 > 0) {
balance += money1;
}
break;
case 2:
System.out.print("请输入取款金额: ");
double money2 = scan.nextDouble();
if (money2 > 0 && money2 <= balance) {
balance -= money2;
} else {
System.out.println("余额不足或者输入有误");
}
break;
case 3:
System.out.println("你的余额为: " + balance);
break;
case 4:
flag = false;
System.out.println("再见,欢迎再次使用");
break;
default:
System.out.println("输入有误");
}
} while (flag);
scan.close();
}
}
8.运算符的优先级
目标1 : 熟练掌握 () 的使用
目标2 : 常识性的运算顺序, && 的优先级, 大于 ||