前言
编程可以让计算机进行复杂操作,实现人类与计算机的交互。
文章目录
一、变量
1、 定义变量
-
变量必须先定义再使用,不可重名。
-
方式 1
// 先定义再赋值 int a; // 定义 a = 5; // 赋值
-
方式 2
// 边定义边赋值 int a = 5; // 边定义边初始化 int b; // 定义变量不赋值 int c = a; // 赋值变量,此时 c = 5 int d = 10 / 2; // 赋值一个算式
2、数据类型
1)整数类型
类型 | 字节数 | 表示范围 | 举例 |
---|---|---|---|
byte | 1 | -128 ~ 127 | byte a = 123; |
short | 2 | -32768 ~ 32767 | short b = 12345 |
int | 4 | -2147483648 ~ 2147483647 (109) | int c = 123456789 |
long | 8 | -263 ~ 263 - 1 (1018) | long d = 123456723423432L |
byte
:整数,占一个字节,8
位,可以表示 28 =256
种情况(表示数的范围一般为一半负数一半非负数 -27 ~ 27 - 1);short
:整数,占两个字节,16
位,可以表示 216 =65536
种情况(表示数的范围为 -215 ~ 215-1);int
:整数,占四个字节,32 位,表示数的范围为 -231 ~ 231-1 (表示数的范围的绝对值为 2.1*109);
2)浮点类型
类型 | 字节数 | 表示范围 | 举例 |
---|---|---|---|
float | 单精度浮点型 4 字节 | 有效数字为 6-7 位 | float e = 1.2F |
double | 双精度浮点型 8 字节 | 有效数字为 15-16 位(10300) | double f = 1.2, g = 1.2D |
-
举例,1.234*105:有效数字为
4
位; -
float
:有效数字为 6-7 位,即只能保证前 6-7 位的数字是精确的,后面位的数字是近似值; -
double
:有效数字为 15-16 位,即只能保证前 15-16 位的数字是精确的,后面位的数字是近似值(Java 中不加 F 标识默认为 double 类型)。 -
判断两个 double 类型的数是否相等?
double x = 1, y = 2; if (x == y) // 不要这样判断,会有误差 if (Math.abs(x - y) < 1e-6) // 判断两个数的差值小于一个很小的数,认为相等,1e-6:表示10的-6次方
3)逻辑类型
类型 | 字节数 | 表示范围 | 举例 |
---|---|---|---|
boolean | 1 | false、true | boolean f = false |
4)字符类型
类型 | 字节数 | 表示范围 | 举例 |
---|---|---|---|
char | 2 | 0 ~ 65535 | char c = ‘A’ |
3、常量
- 变量的值可以修改,常量的值不能修改;
- 在变量前面加修饰符
final
,表示该值不可以进行修改; - 常量的作用是在协同合作开发中,不希望其他人修改该值,将其设置为常量,方便同事间的协作(例如,两名同事各自负责一个函数,有一个全局变量,同事 A 不希望同 B 对其进行修改,可以将此变量设置为常量 );
int x = 10; // 变量x final int y = 10; // 常量y
- 总结:
final
修饰的类不能被继承,修饰的方法不能被重写,修饰的变量不能被修改;
4、数据类型转化
-
不同数据类型间是可以进行相互转化的。
-
显示转化(可以明显看到向哪个类型进行转换)
int x = (int)'A';
-
隐式转化
- 两个不同数据类型的变量作运算时,先转换为相同类型的变量,再作运算;
- 转换的原则为:范围小的变量类型会优先转换为范围大的变量类型;
double x = 12; y = 4 * 3.3;
二、运算符
1)/
- 注意点:如果左右两边是整数的话,向 0 的方向取整;
- 向 0 取整 与 向下取整 的区别
- 向 0 取整:
30 / 20 = 1
,-30 / 20 = -1
; - 向下取整:
-30 / 20 = -2
;
- 向 0 取整:
2)%
a%b
:a/b 的余数是多少
2)++ 和 - -
- ++:先取值再 +1,++:先 +1 再取值;
int a = 1; int b = a ++; // 先取出a的值赋值给b,a再+1 int c = ++ a; // 先将a的值+1,再赋值给c
3)+= -= *= /=
a = a +b; <=> a += b; // 在a的基础上加上b
a -= 5; // 在 a 的基础上减去5
a *= 2; // a 乘某个数
a /= 2; // a 除某个数
a %= 4; // 将 a 变成对于某个数的整数
三、表达式
1)表达式中全是常量
int a = 6 + 3 * 4 / 2 - 2;
2)表达式中有变量
int b = a * 10 + 5 / 2;
四、输入与输出
1、输入
1)输入数据规模较小
- 输入数的个数(输入数据规模)在 105 以内可以用 Scanner;
import java.util.Scanner; public class Main { public static void main(String[] args) throws Exception { Scanner sc = new Scanner(System.in); String str = sc.next(); // 读入一个字符串,读入时遇到空格、回车、制表符 停止,每次读入一个字符串 String line = sc.nextLine(); // 读入一个字符串,直到遇到回车停止(读入一整行字符串), int x = sc.nextInt(); // 读入下一个整数 float y = sc.nextFloat(); // 读入下一个单精度浮点数 double z = sc.nextDouble(); // 读入下一个双精度浮点数 } }
2)输入规模较大(超过105)
- BufferedReader 这种较快的输入方式,只有一个 API 为 readLine,只能读入字符串[浮点数也可以读进来],想要读入整数只能手动操作[先读入字符串,然后再手动将字符串转换为int]):int x = Integer.parseInt(br.readLine());(将字符串转换为 int)
import java.io.BufferedReader; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); // 只有这一个api,读入字符串 System.out.println(str); } }
2、输出
public class Main {
public static void main(String[] args) throws Exception {
System.out.println(123); // 输出整数 + 换行
System.out.println("Hello World"); // 输出字符串 + 换行
System.out.print(123); // 输出整数没有换行
System.out.print("yxc\n"); // 输出字符串没有换行
System.out.printf("%04d %.2f\n", 4, 123.456D); // 格式化输出,float与double都用%f输出
}
}