目录
第一章、 了解Java
第二章、 基本语法—变量
第三章、 运算符
第四章、 程序控制结构
第五章、 数组、排序、查找
第六章、 面向对象编程(基础)
第三章、 运算符
3.1 运算符介绍
- 运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。
- 算术运算符
- 赋值运算符
- 关系运算符[比较运算符]
- 逻辑运算符
- 位运算符[需要二进制基础]
- 三元运算符
3.2 算术运算符
- 介绍
算术运算符是对数值类型的变量进行运算的,在Java程序中使用的非常多。
- 算术运算符一览
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
+ | 正号 | +7 | 7 |
- | 负号 | b=11;-b | -11 |
+ | 加 | 9+9 | 18 |
- | 减 | 10-8 | 2 |
* | 乘 | 7*8 | 56 |
/ | 除 | 9/9 | 1 |
% | 取模(取余) | 11%9 | 2 |
++ | 自增(前):先运算后取值 | a=2;b=++a | a=3;b=3 |
++ | 自增(后):先取值后运算 | a=2;b=a++ | a=3;b=2 |
– | 自减(前):先运算后取值 | a=2;b=- -a | a=1;b=1 |
– | 自减(后):先取值后运算 | a=2;b=a- - | a=1;b=2 |
+ | 字符串相加 | "hello "+“World” | “hello World” |
当两个整数进行算术运算操作时,得到的结果仍然是整数类型。若有小数,得到的结果就为小数。
- /的使用
分为整数除法和浮点数除法,具体介绍如下代码解释:
package chapter3;
public class Test1 {
public static void main(String argsp[]){
int a = 5;
int b = 2;
//第一个知识点(整数除法):两个整数相除默认得到的也是整数,且不是四舍五入,是直接去除小数部分
int c = a / b;
double d= a / b;//本质是整数除法,先得到整数,然后再通过自动类型转换得到浮点数
System.out.println(c);//2
System.out.println(d);//2.0
//第二个知识点(浮点数除法):至少要有一个操作数是浮点数,得到的数就不去除小数部分
float f1=10.0f;
int i1=3;
System.out.println(f1/i1);//3.33333…………
}
}
- %的使用
在Java中,%的本质可看做这样的一个公式:a % b = a - a / b *b,
即取模运算符 “%” 用于计算两个整数相除后的余数,符号位看被除数a即可。
package chapter3;
public class Test2 {
public static void main(String args[]){
//分为整数取模
int c = 10 % 3;
System.out.println(c); // 输出结果为1
//负数取模,其中一个是负数,若分子是正数,结果模也是正数
int d= 10 % -3;
System.out.println(d); // 输出结果为1
//负数取模,其中一个是负数,若分子是负数,结果模可能是负数或者0
int e = -10 % 3;
System.out.println(e); // 输出结果为-1
//负数取模,若分子和分母都是负数,结果模可能是负数或正数
int f = -10 % -3;
System.out.println(f); // 输出结果为-1
//最主要的是看公式a % b = a - a / b *b
}
}
- ++的使用
“++” 是一种递增运算符,用于对变量进行加 1 操作。
在 Java 中,有两种使用 “++” 的方式:
(1). 前缀递增运算符: ++variable
表示先将变量 variable 的值加 1,再执行后续操作。例如:
int i = 5;
int j = ++i; // i 先加 1 变为 6,然后赋值给 j,最终 j 的值为 6
System.out.println(j); // 输出 6
(2). 后缀递增运算符: variable++
表示先使用变量 variable 的原始值进行后续操作,然后再将变量 variable 的值加 1。例如:
int i = 5;
int j = i++; // 先将 i 的值赋给 j,即 j 的值为 5;然后再将 i 加 1,最终 i 的值为 6
System.out.println(j); // 输出 5
(3). 通过写代码理解
package chapter3;
public class Test3 {
public static void main(String args[]){
//++的使用,分为两种用法
//第一个用法:++variable,先对variable进行加1操作,再进行其他操作
int i1=1;
int j1=++i1;//i1先加1变成2,然后再赋值给j1,j1=2
System.out.println(j1);
//第二种用法:variable++,先对使用variable原始的值进行操作,最后在进行加1
int i2=1;
int j2=i2++;//i2先执行赋值操作,最后在进行加1,即j2=1,i2=2
System.out.println(j2);
}
}
- 作业:
(1). 假设还有59天,问:一共xx星期零xx天
(2). 定义一个变量保存华氏度,华氏度转摄氏度:5/9*(华氏度-100),求华氏度对应的摄氏度
package chapter3;
public class Test4 {
public static void main(String args[]){
//假设还有59天,问:一共xx星期零xx天
int day=59;
int weekday=day/7;
int zero=day%7;
System.out.println("一共是"+weekday+"星期零"+zero+"天");
//定义一个变量保存华氏度,华氏度转摄氏度:5/9*(华氏度-100),求华氏度对应的摄氏度
int h=246;
float s;
s=(float) 5.0/9*(h-100);
System.out.println(s);
}
}
3.3 关系运算符
-
介绍
- 关系运算符的结果都是boolean型,也就是要么是true,要么是false
- 关系表达式 经常用在if结构的条件中或循环结构的条件中
-
关系运算符一览
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
== | 相等于 | 8==7 | false |
!= | 不等于 | 8!=7 | true |
< | 小于 | 8<7 | false |
> | 大于 | 8>7 | true |
<= | 小于等于 | 8<=7 | false |
>= | 大于等于 | 8>=7 | true |
instanceof | 检查是否是类的对象 | “hello” instanceof String | true |
-
细节说明
- 关系运算符的结果都是boolean型,也就是要么是true,要么是false.
- 关系运算符组成的表达式,我们称为关系表达式。a > b
- 比较运算符"==“不能误写成”="
3.4 逻辑运算符
- 介绍
用于连接多个条件(多个关系表达式),最终的结果也是一个boolean值。
- 逻辑运算符一览
- 分为两组学习
- 短路与 &&,短路或||,取反 !
- 逻辑与 &,逻辑或 |, 逻辑异或^
a | b | a&b | a&&b | a|b | a||b | !a | a^b |
---|---|---|---|---|---|---|---|
true | true | true | true | true | true | false | false |
true | false | false | false | true | true | false | true |
false | true | false | false | true | true | true | true |
false | false | false | false | false | false | true | false |
- 说明逻辑运算规则:
- a&b : &叫逻辑与;规则:当a 和b同时为true ,则结果为true,否则为false(有假则假)
- a&&b : &&叫短路与;规则:当a和b同时为true ,则结果为true,否则为false(有假则假)
- a|b:|叫逻辑或;规则:当a和b,有一个为true ,则结果为true,否则为false(有真则真)
- a]|b:||叫短路或,规则:当a和b,有一个为true ,则结果为true,否则为false(有真则真)
- !a:叫取反,或者非运算。当a为true,则结果为false,当 a为false是,结果为true
- a^b:叫逻辑异或,当a和b不同时,则结果为true,否则为false
- &&和&基本规则名称
名称 | 语法 | 特点 |
---|---|---|
短路与&& | 条件1&&条件2 | 两个条件都为true,结果为true |
逻辑与& | 条件1&条件2 | 两个条件都为true,结果为true |
- &&和&使用区别
- &&短路与:如果第一个条件为false,则第二个条件不会判断,最终结果为false,效率高
- &逻辑与:不管第一个条件是否为false,第二个条件都要判断,效率低
- 开发中,我们使用的基本是短路与&&,效率高
- ||和|的基本规则
名称 | 语法 | 特点 |
---|---|---|
短路或|| | 条件1||条件2 | 两个条件有一个为true,结果为true |
逻辑或| | 条件1|条件2 | 两个条件有一个true,结果为true |
- ||和|的区别
- ||短路或:如果第一个条件为true,则第二个条件不会判断,最终结果为true,效率高。
- |逻辑或:不管第一个条件是否为true,第二个条件都要判断,效率低。
- 开发中,我们基本使用||
3.5 赋值运算符
- 介绍
赋值运算符就是将某个运算后的值,赋给指定的变量。
- 赋值运算符的分类
- 基本赋值运算符 =
- 复合赋值运算符
比如:
+=、-=、*=、/=、%=等
3.6 三元运算符
- 基本语法
条件表达式?表达式1:表达式2;
- 如果条件表达式为true,运算后的结果是表达式1;
- 如果条件表达式为false,运算后的结果是表达式2;
int x = 10;
int y = 20;
int max = (x > y) ? x : y;
System.out.println("Max value is: " + max);
细节:表达式1和表达式2要为可以赋给接收变量的类型(或可以自动转换)
int c=10>9?1.1:2.9;//错误
double d=10>9?89:90;//对,自动类型转换
- 标识符的命名规则
- 由26个英文字母大小写,0-9,_或$组成
- 数字不可以开头
- 不可以使用关键字和保留字,但可以包含
- Java中严格区分大小写,长度无限制
- 标识符不可以包含空格
- 关键字
定义:被Java语言赋予了特殊含义,用于专门用途的字符串
特点:关键字中所有字母都为小写
3.7 运算符优先级
Java中的运算符优先级如下(按从高到低的顺序):
- 小括号:()
- 一元运算符:++、–、+、-、!、~
- 乘性运算符:*、/、%
- 加性运算符:+、-
- 移位运算符:<<、>>、>>>
- 关系运算符:>、<、>=、<=、instanceof
- 相等运算符:==、!=
- 按位与运算符:&
- 按位异或运算符:^
- 按位或运算符:|
- 逻辑与运算符:&&
- 逻辑或运算符:||
- 条件运算符:?:
- 赋值运算符:=、+=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=、>>>=
- 逗号运算符:
(1). 运算符优先级决定了表达式中运算符的执行顺序。在表达式中,拥有更高优先级的运算符会先被执行,如果出现相同优先级的运算符,则按照从左到右的顺序进行计算。
(2). 需要注意的是,在实际使用时,可以通过使用小括号来改变运算符的执行顺序,提高代码的可读性和准确性。
3.8 键盘输入法scanner
- 介绍
在Java中,接收用户输入的数据,可以用键盘输入语句来获取即Scanner。
- 步骤:
-
导入该类的所在包,java.util.*
-
创建该类对象(声明变量)
-
调用里面的功能
- 在类主体中,只能包含以下内容:
成员变量的定义
构造方法
方法的定义
在Java中,Scanner类是用于读取用户输入的工具类,可以方便地从控制台或文件中读取数据,支持读取不同类型的数据,如字符串、整型、浮点型等。使用Scanner需要先创建一个Scanner对象,并指定读取数据的来源。如果要从控制台读取数据,则可以传入System.in作为参数。例如:
Scanner scanner = new Scanner(System.in);
读取控制台输入的字符串可以使用next()方法,例如:
String input = scanner.next();
如果要读取整数,则可以使用nextInt()方法,例如:
int num = scanner.nextInt();
如果要读取浮点数,则可以使用nextFloat()或nextDouble()方法,例如:
float f = scanner.nextFloat();
double d = scanner.nextDouble();
需要注意的是,在读取不同类型的数据时,需要确保输入的内容与所读取的数据类型相符合,否则可能会出现异常,需要进行异常处理。
另外,读取完数据后应该及时关闭Scanner对象,释放资源。可以使用close()方法来关闭对象,例如:
scanner.close();
- 练习:
输入字符串、整型、单精度浮点型、双精度浮点型
package chapter3;
import java.util.Scanner;
public class Test5 {
public static void main(String args[]){
//Scanner的使用
Scanner scanner = new Scanner(System.in);
String s = scanner.next();
int i = scanner.nextInt();
float f = scanner.nextFloat();
double d = scanner.nextDouble();
scanner.close();
System.out.printf("%s %d %.2f %.2f%n", s, i, f, d);
}
}
3.9 位运算
位运算是一种对二进制数字进行操作的运算方式,常用于底层系统开发、位掩码操作、图像处理等领域。在Java中,提供了多种位运算符来进行位操作。
以下是常用的位运算符及其功能:
- 与运算(&):两个数的对应位都为1时,结果为1,否则为0。
- 或运算(|):两个数的对应位有一个为1时,结果为1,否则为0。
- 异或运算(^):两个数的对应位不相同时,结果为1,否则为0。
- 取反运算(~):对一个数的每个位取反,即0变为1,1变为0。
- 左移运算(<<):将一个数的所有位向左移动指定的位数,低位补0。
- 右移运算(>>):将一个数的所有位向右移动指定的位数,高位补符号位(正数补0,负数补1)。
- 无符号右移运算(>>>):将一个数的所有位向右移动指定的位数,高位补0。
下面是一些示例:
int a = 5; // 二进制表示为: 00000101
int b = 3; // 二进制表示为: 00000011
int c = a & b; // 与运算,结果为: 00000001,即1
int d = a | b; // 或运算,结果为: 00000111,即7
int e = a ^ b; // 异或运算,结果为: 00000110,即6
int f = ~a; // 取反运算,结果为: 11111010,即-6
int g = a << 2; // 左移运算,结果为: 00010100,即20
int h = a >> 1; // 右移运算,结果为: 00000010,即2
int i = a >>> 1; // 无符号右移运算,结果为: 00000010,即2
需要注意的是,位运算符只能用于整数类型(byte、short、int、long)的操作,不能用于浮点数类型。此外,在使用位运算时应谨慎,确保理解运算规则并避免出现意外的错误。
3.10 本章作业