目录
1、运算符
1.1、算术运算符
1. 基本四则运算符:加减乘除模(+ - * / %)
- 模% 表示余数,如5%3=2
- int / int 结果还是int类型,而且会向下取整;如 5/2=2
- 做除法和取模时,右操作数不能为0
- % 不仅可以对整型取模,也可以对double类型取模,但是没有意义,一般都是对整型取模的
- 两侧操作数类型不一致时,向类型大的提升
//做除法和取模时,右操作数不能为0
int a = 1;
int b = 0;
System.out.println(a / b) // 算术异常^
// % 对double类型取模
System.out.println(2.5 % 2.0);
// 运行结果 0.5^
//两侧操作数类型不一致时,向类型大的提升
System.out.println(1+0.2);
// +的左侧是int,右侧是double,在加之前int被提升为double
// 故:输出1.2
2、增量运算符:+= -= *= %=
- 只有变量才能使用该运算符,常量不能使用
int a = 1;
a += 2; // 相当于 a = a + 2
a -= 1; // 相当于 a = a - 1
a *= 3; // 相当于 a = a * 3
a %= 3; // 相当于 a = a % 2
3. 自增/自减运算符 ++ --
- ++是给变量的值+1,--是给变量的值-1
- 只有变量才能使用自增/自减运算符,常量不能使用,因为常量不允许被修改
- 前置++是先给变量+1,然后使用变量中的值
- 后置++是先使用变量原来值,表示式结束时给变量+1
int a = 1;
++a; // a=2
System.out.println(++a); // 先给变量+1,然后使用变量中的值,因此输出3
System.out.println(a); // 输出3
a++; // a=4
System.out.println(a++); // 先使用变量原来值,再给变量+1,因此输出4
System.out.println(a); // 输出5
1.2、关系运算符
主要有六个:== != < > <= >=
- 运算结果是 true 或者 false
- 当需要多次判断时,不能连着写,比如:3 < a < 5
- 在Java中 = 表示赋值,== 表示相等
int a = 10;
int b = 20;
System.out.println(a == b); // false
System.out.println(a != b); // true
System.out.println(a < b); // true
System.out.println(a > b); // false
System.out.println(a = b); // false
1.3、逻辑运算符
主要有三个:&& || ! 语法:表达式1 && 表达式2
- 运算结果是 boolean类型
- 左右表达式必须是boolean类型的结果
1.逻辑与:&&
相当于现实生活中的且,两个表达式都为真,结果才是真,只要有一个是假,结果就是假
2.逻辑或:||
相当于现实生活中的或,左右表达式有一个为真,则结果为真
3.逻辑非:!
语法规则:! 表达式;真变假,假变真
int a = 1;
int b = 2;
System.out.println(a == 1 && b == 2); // 左为真 且 右为真 则结果为真
System.out.println(a == 1 && b > 100); // 左为真 但 右为假 则结果为假
System.out.println(a > 100 && b == 2); // 左为假 但 右为真 则结果为假
^
System.out.println(a == 1 || b == 2); // 左为真 且 右为真 则结果为真
System.out.println(a == 1 || b > 100); // 左为真 但 右为假 则结果也为真
System.out.println(a > 100 || b == 2); // 左为假 但 右为真 则结果也为真
^
System.out.println(!(a == 1)); // a == 1 为true,取非就是false
System.out.println(!(a != 1)); // a != 1 为false,取非就是true
1.4、位运算符
1. 按位与 &:如果两个二进制位都是 1, 则结果为 1, 否则结果为 0
2. 按位或 |:如果两个二进制位都是 0, 则结果为 0, 否则结果为 1.
3. 按位取反 ~:如果该位为 0 则转为 1, 如果该位为 1 则转为 0
4. 按位异或 ^:如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1


异或性质:
1. 0和任何值的异或等于本身,即:A ^ 0 = A
2. 异或本身等于0,即 A ^ A = 0
3. 异或满足结合律,即 A ^ B ^ C = A ^ ( B ^ C)
1.5、移位运算
1. 左移 <<: 最左侧位不要了, 最右侧补 0
2. 右移 >>: 最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)
3. 无符号右移 >>>: 最右侧位不要了, 最左侧补 0



- 向左移位时,丢弃的是符号位,因此正数左移可能会编程负数
- 左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方
- 右移 1 位, 相当于原数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方
- 由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替
1.6、条件运算符
表达式1 ? 表达式2 : 表达式3
当 表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值
当 表达式1 的值为 false 时, 整个表达式的值为 表达式3 的值
// 求两个整数的最大值
int a = 10;
int b = 20;
int max = a > b ? a : b;
2、逻辑语句
分支结构:if语句,switch语句
循环结构:while语句
2.1、if 语句
语法:

三条语句分别代表:
1.如果布尔表达式结果为true,执行if中的语句,否则不执行。
2.如果布尔表达式结果为true,则执行if中语句,否则执行else中语句。
3.表达式1成立,执行语句1,否则表达式2成立,执行语句2,否则执行语句3。
例:判断一个年份是否为闰年
public static void main3(String[] args) {
Scanner scanner = new Scanner(System.in);
int year = scanner.nextInt();
if(year % 100 == 0) {
if(year % 400 == 0) {
System.out.println("世纪闰年");
}else {
System.out.println("不是闰年");
}
}else {
if(year % 4 == 0) {
System.out.println("普通闰年");
}else {
System.out.println("不是闰年");
}
}
}
2.2、switch 语句
语法:

执行流程:
1. 先计算表达式的值
2. 和case依次比较,一旦有响应的匹配就执行该项下的语句,直到遇到break时结束
3. 当表达式的值没有与所列项匹配时,执行default
注:1、多个case后的常量值不可以重复
2、break 不要遗漏, 否则会失去 "多分支选择" 的效果
3、switch的括号内只能是以下类型的表达式:
基本类型:byte、char、short、int,注意不能是long类型
引用类型:String常量串、枚举类型
4、不能做参数的类型有long、float、double、boolean
public static void main(String[] args) {
String str = "12";
switch (str) {
case "1":
System.out.println(2);
break;
case "2":
System.out.println(1);
break;
default:
System.out.println("输入有误!");
break;
}//输出结果为 输入有误!
}
2.3、while 循环
语法:


循环条件为 true, 则执行循环语句; 否则结束循环

例:计算 5 的阶乘
public static void main8(String[] args) {
int n = 1;
int result = 1;
while (n <= 5) {
result *= n;
n++;
}
System.out.println(return);
}
2.4、break
break 的功能是让循环提前结束
例:找到 100 - 200 中第一个 3 的倍数
int num = 100;
while (num <= 200) {
if (num % 3 == 0) {
System.out.println("找到了 3 的倍数, 为:" + num);
break;
}
num++;
}
2.5、continue
continue 的功能是跳过这次循环, 立即进入下次循环
例:找到 100 - 200 中所有 3 的倍数
int num = 100;
while (num <= 200) {
if (num % 3 != 0) {
num++; // 这里的 ++ 不要忘记! 否则会死循环.
continue;
}
System.out.println("找到了 3 的倍数, 为:" + num);
//执行到 continue 语句的时候, 就会立刻进入下次循环(判定循环条件),
//从而不会执行到下方的打印语句
num++;
}
2.6、for 循环
语法:

表达式1: 用于初始化循环变量初始值设置,在循环最开始时执行,且只执行一次
表达式2: 循环条件,满则循环继续,否则循环结束
表达式3: 循环变量更新方式
执行过程:1 2 4 3 -> 2 4 3 -> 2 4 3 -> ... -> 2为false,循环结束
例:计算 5 的阶乘
int result = 1;
for (int i = 1; i <= 5; i++) {
result *= i;
}
System.out.println("result = " + result);
注:while和for循环都可以使用continue结束单趟循环,使用break结束整个循环
3、输入输出
3.1、从键盘输入
使用 Scanner 读取字符串/整数/浮点数
使用键盘输入需要导包,在java文件的最上方输入 import java.util.Scanner;
创建一个Scanner对象;Scanner scanner = new Scanner(System.in);
scanner.nextInt() //输入整数
scanner.nextLine() //输入字符串
sc.nextFloat() //输入浮点数
next()和nextLine()的区别
next和nextLine都可以读入,next()的规则是读到第一个空格就停止,这个空格是广义上的空格,包括Tab或者换行。nextLine()会读入一整行的内容,直到遇到换行符(回车)
Scanner sc = new Scanner(System.in);
String s;
s = sc .next(); // 输入hello world
System.out.println(s); // 输出只会得到 hello^
Scanner sc = new Scanner(System.in);
String s;
s = sc.nextLine(); // 输入hello world
System.out.println(s); // 输出 hello world
例:猜数字游戏
import java.util.Random; //导入随机数包
import java.util.Scanner;
public static void main(String[] args) {
Random random = new Random();
int randNum = random.nextInt(100);//随机数范围[0,100)
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("请输入你要猜的数:");
int num = scanner.nextInt();
if (num > randNum){
System.out.println("猜大了");
}else if (num == randNum){
System.out.println("猜对了");
break;
}else {
System.out.println("猜小了");
}
}
}
3.2、输出到控制台
语法:
int a = 1;
System.out.println(a); // 输出a, 带换行
System.out.print(a); // 输出a, 不带换行

3295

被折叠的 条评论
为什么被折叠?



