基本程序设计
- 从控制台读入:
- 类(Class)的导入:
- 明确导入:
- 通配符导入:
- 变量声明
- 一般变量
- 常量
- 不同的数值类型:
- 数值型字面值
- 整型字面值
- 浮点型字面值
- 显示当前时间:UNIX时间戳
- ⚠️手动实现各种取整,去除最后k位
- 注意事项:
本文是《Java语言程序设计与数据结构(基础篇)》的笔记。
从控制台读入:
import java.util.Scanner;
Scanner input = new Scanner(System.in);
int tmp1 = input.nextInt();
long tmp2 = input.nextLong();
//System.out.println(tmp1);
//System.out.println(tmp2);
- Java使用System.out表示标准输出设备,一般为显示器;而输入设备为System.in,一般为键盘。
- 多次输入也只要定义一个Scanner即可。
- 我们也可以不用导入java.util.Scanner,此时需要写
java.util.Scanner input = new java.util.Scanner(System.in);
- Eclipse在程序中会有一个提示:要关闭输入,以防止可能的资源泄漏。但可以先忽略警告,因为程序结束时输入将自动关闭。
- 如果输入了一个字符,会报错:Exception in thread "main" java.util.InputMismatchException
类(Class)的导入:
⚠️ 除非在程序中使用到了某个类,否则被导入包中的类的信息在编译时或运行时是不被读入的。导入语句只是告诉编译器在哪里可以找到这些类。明确导入和通配符导入在性能上是没有什么差别的。
- 有些类,如Math类(在java.lang包里面)是被隐式导入的。所以不需要再手动导入。
明确导入:
如import java.util.Scanner;
通配符导入:
如import java.util.*;: 此时会导入一个包中所有的类。
变量声明
一般变量
int i,j,k;
int i=1,j=2;
- 之所以要声明数据类型,是为了让编译器根据数据类型为变量分配合适的内存空间。
常量
final datatype NAME = value;
不同的数值类型:
类型名 | 存储空间 |
byte | 8位带符号数字 |
short | 16位带符号数字 |
long | 64位带符号数字 |
float | 32位,标准IEEE 754,正数范围 1.4E-45 ~ 3.4E38 |
double | 64位,标准IEEE 754,正数范围 4.9E-324 ~ 1.7976E308 |
数值型字面值
整型字面值
- 二进制整数字面值: 0B…。如0B11就是3。
- 八进制:0…。如011就是9。
- 十六进制:0X…。如0X11就是17。
- 可以用下划线分开:println(123_456); == println(123456);
浮点型字面值
- 一般情况下5.0是double类型的,而不是float类型
- 只有0.5F才表示float类型。
- ⚠️ 例如:
System.out.println(1.0F/3.0F);
System.out.println(1.0F/3.0);
System.out.println(1.0/3.0);
的输出为:
0.33333334
0.3333333333333333
0.3333333333333333
显示当前时间:UNIX时间戳
- System类中的方法currentTimeMilis返回从GMT1970年1月1日00:00:00开始到当前时刻的好秒数。
- System.out.println(System.currentTimeMillis);
⚠️手动实现各种取整,去除最后k位
- 向下取整(int)(x)
- 向上取整(int)(x+0.5)
- 去除最后k位(int)(x / (10^k))
注意事项:
- 注意Java中做除法的数的数据类型:
System.out.println(Math.pow(2, 1/2));
System.out.println(Math.pow(2, 1.0/2));
前者结果是1,后者结果才是,因为。见浮点型字面值的例子,它的结果是取类型大的那个。