摘要
Java基础重温_02:
运算符(算术运算、+操作、赋值运算、自增自减、关系运算(比较)、逻辑运算、短路逻辑运算、三元运算)
三元运算符案例(2只老虎:2个变量比较、三个和尚:3个变量比较)
键盘录入(Scanner类、三元运算符案例结合键盘录入)
控制流程语句(if结构、if…else结构、if…else…if结构)
控制流程语句案例
一、运算符
运算符是对常量或者变量进行操作的符号。
运算符表达式:通过运算符连接起来的式子
1、算术运算符
加、减、乘、除、取余/取模
- 除法(/)运算的时候,如果两个数都是整数,结果也只能保存整数部分。要有小数,必须要有小数参数运算。
- %叫做取余(取模),结果是余数。
代码示例
public class OperatorDemo01 {
public static void main(String[] args) {
//定义两个变量
int a = 6;
int b = 4;
2 / 13 = 0....2
4/10
System.out.println(a + b); //10
System.out.println(a - b); //2
System.out.println(a * b); //24
System.out.println(a / b); //1 注意:结果是1 不是1.5 被除数以及除数都是整数,结果也是整数
System.out.println(a % b); // 2 6 / 4 = 1......2
//除法得到的是商,取余得到是余数
6 /5 = 1.....1
//整数相除只能得到整数,要想得到小数,必须有浮点数的参与
System.out.println(6.0 / 4); // 1.5
}
}
数据类型自动提升(算术表达式)
算术表达式中包含多个基本数据类型的时候,整个表达式的类型会自动进行提升。
因为在Java里面,进行运算的时候,只能有一种数据类型。
提升规则
- byte,short,char将被提升为int
- 整个表达式的类型自动提升到表达式中最高等级操作数同样的类型。
- 等级顺序:byte,short,char->int->long->float->double
2、+操作
字符的+操作
public class OperatorDemo02 {
public static void main(String[] args) {
//定义两个变量
int i = 10;
char c = 'A'; //'A'的值是65
c = 'a'; //'a'的值是97
c = '0'; //'0'的值是48
System.out.println(i + c);
int d = i + c; //int 类型 和 char类型进行运算 最高等级类型为int
double e = 10 + 13.14; // int类型和 double类型进行运算 最高等级类型为double
}
}
字符+操作原理
字符在进行 “+” 操作的时候,是拿字符在计算机底层对应的数值来进行计算的(通过编码表查询字符对应的底层数值)
- ‘A’ 对应的值是 65,A-Z是连续的
- 'a’对应的值是 97,a-z 是连续的
- '0’对应的值是 48,’0‘ -’9‘是连续的
编码表
计算机底层使用二进制运算,所以文字和符号必须转换成二进制数才能被计算机识别,编码表就是将文字等符号编成对应的数的表格,因为二进制记录起来比较麻烦,所以使用十进制数进行文字编码。
世界上第一张编码表ASCII(美国标准信息交换码)。常用编码表都兼容ASCII码表。
常用的编码:
ASCII编码:美国标准信息交换码,世界上第一张编码表。
GB2312编码:简体中文编码,对常用汉字进行了编码,兼容ASCII。
GBK:加强版的中文编码表,对更多汉字进行了编码,兼容ASCII
UTF-8编码:万国码表,常作为浏览器上的网页编码,可以统一显示各国文字,兼容ASCII。
字符串的+操作
public class OperatorDemo03 {
public static void main(String[] args) {
System.out.println("it" + "heima"); // itheima
System.out.println("itheima" + 666); // itheima666
System.out.println(666 + "itheima"); // 666itheima
System.out.println("黑马" + 6 + 66); // 黑马666
System.out.println(1 + 99 + "年黑马"); // 100年黑马
}
}
1、当“+”操作中出现字符串时,这个“+”是字符串连接符**,而不是算术运算 ,拼接的结果是字符串。例如: “itheima”+666 ->“itheima666”
2、在“+”操作中,如果出现了字符串,就是连接运算符,否则就是算术运算符。当连续进行“+”操作时,从左往右逐个执行。 例如: 1 + 99 + “年黑马” -> “100年黑马”
小结
一个表达式里面,如果没有碰到字符串,前面的+号表示的都是算术运算符,然后,一旦碰到了字符串之后,后面的+号表示的都是拼接
4、赋值运算符
赋值运算符的特点(隐含强制类型转换)
扩展的赋值运算符隐含了强制类型转换
5、自增自减运算符
自增运算符:变量本身+1
++
自减运算符:变量本身-1
--
使用格式
++和–可以直接放在变量的前面或者后面。
放在前面叫前自增/前自减
放在后面叫后自增/后自减
//后自增/后自减
a++;
a--;
//前自增/前自减
++a;
--a;
自增自减独立运算、与其他操作数运算的区别
自增自减独立运算时
前自增与后自增没有任何的区别。
int a = 10;
a++;
System.out.println(a); //11
++a;
System.out.println(a); //12
自增自减与其他操作数运算时区别
后自增/自减: 先给别人去使用,然后再自增/自减。
int a = 10;
int b = a++;
System.out.println(a); //11
System.out.println(b); //10
前自增/自减: 先自增/自减,然后再给别人去使用
int a = 10;
int b = ++a;
System.out.println(a); //11
System.out.println(b); //11
6、关系运算符(比较运算符)
等于、不等于、大于、大于等于、小于、小于等于。
运算的结果要么是true 要么是false
符号 | 名称 | 说明 |
---|---|---|
== | 等于 | a==b,判断a和b的值是否相等,成立为true,不成立为false |
!=(!非) | 不等于 | a!=b,判断a和b的值是否不相等,成立为true,不成立为false |
> | 大于 | a>b,判断a是否大于b,成立为true,不成立为false |
>= | 大于等于 | a>=b,判断a是否大于等于b,成立为true,不成立为false |
< | 小于 | a<b,判断a是否小于b,成立为true,不成立为false |
<= | 小于等于 | a<=b,判断a是否小于等于b,成立为true,不成立为false |
“==”与“=”的区别
“==”表示的是判断两个值是否相等,
“=”表示的是赋值
7、逻辑运算符
逻辑与、逻辑或、逻辑异或、逻辑非
作用:连接关系表达式,或连接布尔类型的常量和变量
运算结果要么是true 要么是false
符号 | 作用 | 说明 |
---|---|---|
& | 逻辑与 | a&b,a和b都是true,结果为true,否则为false |
| | 逻辑或 | a|b,a和b都是false,结果为false,否则为true |
^ | 逻辑异或 | a^b,a和b结果不同为true,相同为false |
! | 逻辑非 | !a,结果和a的结果正好相反 |
8、短路逻辑运算符
短路与、短路或
符号 | 作用 | 说明 |
---|---|---|
&& | 短路与 | 作用和&相同,但是有短路效果 如果左边为false就不会运行右边的 |
|| | 短路或 | 作用和|相同,但是有短路效果 如果左边为TRUE 就不会运行右边的 |
逻辑运算符和短路逻辑运算符区别:
1、逻辑与&,无论左边真假,右边都要执行。
短路与&&,如果左边为真,右边执行;如果左边为假,右边不执行。
2、逻辑或|,无论左边真假,右边都要执行。
短路或||,如果左边为假,右边执行;如果左边为真,右边不执行。
8、三元运算符
三元表达式的格式:
数据类型 变量名 = 判断表达式 ? 表达式1 : 表达式2
运行流程:首先计算关系表达式的值,如果是true,表达式1的值就是运算结果;如果是false,表达式2的值就是运算结果
代码示例
public class OperatorDemo {
public static void main(String[] args) {
//定义两个变量
int a = 10;
int b = 20;
// 获取两个数中较小的值
int min = a > b ? b : a;
//int min = a < b ? a : b;
}
}
注意:使用三元运算符的时候一定需要定义变量接收结果或者是直接使用结果。
二、三元运算符案例
1、两只老虎(两个变量比较)
需求
使用三元运算符去判断两只老虎的体重是否相等,其中一只老虎体重是180kg,另外一只是200kg
解题步骤
- 定义两个变量用于保存老虎的体重,单位为kg
- 用三元运算符实现老虎体重的判断,体重相同,返回true,否则,返回false。
- 输出结果
代码实现
public class OperatorTest01 {
public static void main(String[] args) {
//1:定义两个变量用于保存老虎的体重,单位为kg,这里仅仅体现数值即可。
int weight1 = 180;
int weight2 = 200;
//2:用三元运算符实现老虎体重的判断,体重相同,返回true,否则,返回false。
boolean b = weight1 == weight2 ? true : false;
//3:输出结果
System.out.println("b:" + b);
}
}
2、三个和尚(三个变量比较)
需求
使用三元运算符去求三个和尚的最高身高,其中第一个和尚身高是150cm,第二个和尚身高是210cm,第三个和尚身高是165cm
解题步骤
- 定义三个变量用于保存和尚的身高,单位为cm
- 用三元运算符获取前两个和尚的较高身高值,并用临时身高变量保存起来。
- 用三元运算符获取临时身高值和第三个和尚身高较高值,并用最大身高变量保存。
- 输出结果
代码实现
public class OperatorTest02 {
public static void main(String[] args) {
//1:定义三个变量用于保存和尚的身高,单位为cm,这里仅仅体现数值即可。
int height1 = 150;
int height2 = 210;
int height3 = 165;
//2:用三元运算符获取前两个和尚的较高身高值,并用临时身高变量保存起来。
int tempHeight = height1 > height2 ? height1 : height2;
//3:用三元运算符获取临时身高值和第三个和尚身高较高值,并用最大身高变量保存。
int maxHeight = tempHeight > height3 ? tempHeight : height3;
//4:输出结果
System.out.println("maxHeight:" + maxHeight);
}
}
三、键盘录入(Scanner类)
接收键盘输入的数据要使用java里面提供的Scanner类
Scanner类使用步骤
1、导包。导包必须放在类上边
import java.util.Scanner;
2、创建对象。
Scanner sc = new Scanner(System.in); // sc 是变量名,可以改 其他的不可以改
3、接收数据。
int x = sc.nextInt()
调用的方法
接收数字:nextInt(),nextDouble(),…
接收字符串:next()
代码实现
//导包
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
//创建对象
Scanner sc = new Scanner(System.in);
//接收数据
int x = sc.nextInt();
//输出数据
System.out.println("x:" + x);
}
}
小结
1、Scanner的方法简单说明
nextlnt():只读取int值,只能读取整数类型的数据,如果输入了非整型的数据(浮点型字符串等)就会报错。
2、next()和nextLine()的区别
next():只读取输入直到空格。不能读取两个由空格或符号隔开的单词。
nextLine(): 读取输入,包括单词之间的空格和除回车以外的所有符号
更多方法查api文档
四、三个和尚升级版(结合Scanner类)
需求
使用三元运算和数据输入两个知识点完成比较三个和尚的最高身高
解题步骤
- 身高未知,采用键盘录入实现。首先导包,然后创建对象。
- 键盘录入三个身高分别赋值给三个变量。
- 用三元运算符获取前两个和尚的较高身高值,并用临时身高变量保存起来。
- 用三元运算符获取临时身高值和第三个和尚身高较高值,并用最大身高变量保存。
- 输出结果。
代码实现
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args) {
//身高未知,采用键盘录入实现。首先导包,然后创建对象。
Scanner sc = new Scanner(System.in);
//键盘录入三个身高分别赋值给三个变量。
System.out.println("请输入第一个和尚的身高:");
int height1 = sc.nextInt();
System.out.println("请输入第二个和尚的身高:");
int height2 = sc.nextInt();
System.out.println("请输入第三个和尚的身高:");
int height3 = sc.nextInt();
//用三元运算符获取前两个和尚的较高身高值,并用临时身高变量保存起来。
int tempHeight = height1 > height2 ? height1 : height2;
//用三元运算符获取临时身高值和第三个和尚身高较高值,并用最大身高变量保存。
int maxHeight = tempHeight > height3 ? tempHeight : height3;
//输出结果。
System.out.println("这三个和尚中身高最高的是:" + maxHeight +"cm");
}
}
五、控制流程语句
顺序结构语句
从上到下按照代码的顺序去执行的语句
执行流程
代码示例
public class OrderDemo {
public static void main(String[] args) {
System.out.println("开始");
System.out.println("语句A");
System.out.println("语句B");
System.out.println("语句C");
System.out.println("结束");
}
}
1、if 结构
格式
if(关系表达式){
语句体1;
}
//关系表达式,即括号最终结果为true/false
if(true){
语句体1;
}
执行流程
- 首先计算关系表达式的值
- 如果关系表达式的值是true,就执行语句体1
- 如果关系表达式的值是false,就不执行语句体1
- 继续执行后面的语句内容
2、if…else 结构
格式
if(关系表达式){
语句体1;
}else{
语句体2;
}
执行流程
- 首先计算关系表达式的值
- 如果关系表达式的值是true,就执行语句体1
- 如果关系表达式的值是false,就执行语句体2
- 继续执行后面的语句内容
3、if…else…if 结构
格式
if(关系表达式1){
语句体1;
}else if(关系表达式2){
语句体2;
}
.....
else{
语句体n + 1;
}
执行流程
- 首先计算关系表达式1的值
- 如果值为true就执行语句体1;如果值为false就计算关系表达式2的值
- 如果值为true就执行语句体2;如果值为false就计算关系表达式3的值
- .…
- 如果没有任何关系表达式为true,就执行语句体n+1。
六、控制流程练习案例
1、奇偶数案例(if…else)
需求
使用if…else的方式去判断一个整数是基数还是偶数
解题步骤
- 为了体现任意给出一个整数,采用键盘录入一个数据。(导包,创建对象,接收数据)
- 判断整数是偶数还是奇数要分两种情况进行判断,使用if…else结构
- 判断是否偶数需要使用取余运算符实现该功能 number % 2 == 0
- 根据判定情况,在控制台输出对应的内容
代码实现
import java.util.Scanner;
public class IfTest01 {
public static void main(String[] args) {
//为了体现任意给出一个整数,采用键盘录入一个数据。(导包,创建对象,接收数据)
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数:");
int number = sc.nextInt();
//判断整数是偶数还是奇数要分两种情况进行判断,使用if..else结构
//判断是否偶数需要使用取余运算符实现该功能 number % 2 == 0
//根据判定情况,在控制台输出对应的内容
if(number%2 == 0) {
System.out.println(number + "是偶数");
} else {
System.out.println(number + "是奇数");
}
}
}
2、考试奖励案例(if…else…if)
目标
使用if…else…if的结构完成考试奖励
解题步骤
- 小明的考试成绩未知,可以使用键盘录入的方式获取值
- 由于奖励种类较多,属于多种判断,采用if…else…if格式实现
- 为每种判断设置对应的条件
- 为每种判断设置对应的奖励
- 数据测试:正确数据,边界数据,错误数据
代码实现
import java.util.Scanner;
public class IfTest02 {
public static void main(String[] args) {
//小明的考试成绩未知,可以使用键盘录入的方式获取值
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个分数:");
int score = sc.nextInt();
//由于奖励种类较多,属于多种判断,采用if...else...if格式实现
//为每种判断设置对应的条件
//为每种判断设置对应的奖励
/*
if(score>=95 && score<=100) {
System.out.println("山地自行车一辆");
} else if(score>=90 && score<=94) {
System.out.println("游乐场玩一次");
} else if(score>=80 && score<=89) {
System.out.println("变形金刚玩具一个");
} else {
System.out.println("胖揍一顿");
}
*/
//数据测试:正确数据,边界数据,错误数据
if(score>100 || score<0) {
System.out.println("你输入的分数有误");
} else if(score>=95 && score<=100) {
System.out.println("山地自行车一辆");
} else if(score>=90 && score<=94) {
System.out.println("游乐场玩一次");
} else if(score>=80 && score<=89) {
System.out.println("变形金刚玩具一个");
} else {
System.out.println("胖揍一顿");
}
}
}