Java核心技术卷1——第三章(下)
-
简单程序
-
注释
-
数据类型
-
变量
-
运算符
-
字符串
-
输入输出
-
读取输入
-
打印输出到标准输出流(控制台窗口)
-
System.out.println();
-
读取标准输入流
-
System.in
-
构造Scanner对象
-
关联System.in
-
Scanner in = new Scanner(System.in);
-
使用Scanner类实现输入操作
-
调用java.util.*包
-
Scanner类方法
-
in.nextLine();//读取一行
-
in.next();//读取一个单词,空白符为分隔
-
in.nextInt();//读取整数
-
in.nextDouble();//读取浮点数
-
in.hasNext();//检测输入中是否还有其他单词
-
in.hasNextInt();//检测是否还有整数的下一个字符序列
-
in.hasNextDouble();//检测是否还有浮点数的下一个字符序列
-
输入可见,不适合输入密码
-
Console类
-
实现读取密码
-
Console cons = System.console();//通过控制台窗口为交互的用户返回一个Console对象
-
String username = cons.readLine("User name");
-
char[] passwd = cons.readPassword("Password");//密码存在一维字符数组中
-
格式化输出
-
宽度x
-
精度.x
-
%格式说明符
-
-
格式控制标志
-
-
日期和时间的格式化
-
以t开始,以表中字母结尾
-
-
-
看不懂。。。
-
%1$(对第一个参数格式化,参数索引)
-
-
文件输入输出
-
读取文件
-
用File对象构造Scanner对象
-
Scanner in = new Scanner(new File(filename));//文件名有\要再加个\,即c:\\myfolder\\filename
-
写入文件
-
构造PrintWriter对象
-
PrintWriter out = new PrintWriter(filename);
-
filename文件找不到,异常
-
throws FileNotFoundException
-
-
控制流程
-
块作用域
-
{}
-
若干条java语句
-
确定变量作用域
-
可嵌套
-
不可声明同名变量
-
C++可以
-
条件语句
-
if(条件){状态1;}
-
else {状态2;}
-
else与最临近的if构成一组
-
if...else if...
-
循环语句
-
while(条件){}
-
do{}while(条件);
-
for(int i=0;i<n;i++){}//确定循环
-
多重选择
-
switch语句
-
switch(value){
-
case value1:...break;//value必须是整数或枚举常量
-
case value2:...break;
-
default:...break;
-
}
-
枚举常量不必在每个标签中指明枚举名,可由switch表达式值确定
-
没有goto
-
带标签的break实现跳转
-
标签在希望跳出的最外层循环之前,后加冒号:
-
flag:
-
while(xxx){
-
while(xxx){}
-
}
-
对于任何使用break语句的代码,需要检测循环是正常结束还是由break跳出
-
标签可放到任何语句,使用break跳转
-
continue语句
-
也可中断控制流程
-
将控制转到最内层循环的首部(while开始,for更新处)
-
带标签的continue
-
跳到与标签匹配的循环首部
-
大数值
-
基本整数和浮点精度不够满足需求
-
java.math包的BigInteger和BigDecimal类
-
BigInteger a = BigInteger.valueOf(100);
-
没有+-*/%
-
BigInteger c = a.add(b);//c = a+b
-
BigInteger d = c.multiply(b.add(BigInteger.valueOf(2)));//d= c*(b+2)
-
d =a.subtract(b);//a-b
-
d =a.mod(b);//a%b
-
d =a.divide(b);//a/b
-
int i = a.compareTo(b);//a=b——>0,a<b——>负数,a>b——>正数
-
BigDecimal divide(BigDecimal other,BigDecimal mode)//商
-
static BigDecimal valueOf(long x,int scale)//返回x/10^scale的大实数
-
数组
-
一种数据结构
-
存储同一类型值的集合
-
整型下标访问
-
声明时需指明数组类型和数组变量的名字
-
int[] a;
-
int a[];
-
声明并未初始化
-
new创建数组
-
int[] a = new int[100];
-
数组长度
-
a.length
-
可为0
-
new int[0]//不是null
-
长度不可变
-
创建数组列表可改变
-
foreach循环
-
for(int i:a){}
-
i暂存a里每个元素
-
a为collect集合
-
数组
-
实现Iterable接口(ArrayList)
-
遍历所有
-
不需要遍历所有,使用传统循环
-
或循环内部使用下标值
-
打印数组所有值
-
Array类的toString方法
-
Arrays.toString(a);//返回一个包含数组元素的字符串[1,2,3,4]
-
初始化
-
int a={1,2,3}//不用new
-
匿名数组new int[]{1,2,3}
-
数组拷贝
-
引用同一数组
-
int[] a = b;
-
a[5] = 3;
-
会导致修改a的时候b也一起修改
-
需要拷贝到新的数组
-
Arrays的copyOf方法
-
int[] a = Arrays.copyOf(b,b.length);
-
第二个参数表示新数组大小
-
可用来增加数组大小
-
多余元素赋值
-
数值型——0
-
布尔型——false
-
System.arraycopy(from,fromIndex,to,toIndex,count);
-
从from数组的fromIndex位置拷贝count个元素到to数组的toIndex位置
-
与分配在堆上的数组指针一样
-
相当于int* a = new int[100]
-
java的[]预定义为检查数组边界,而且没有指针运算
-
不能通过a+1获取数组下一元素
-
命令行参数
-
main函数的String args[]参数
-
字符串数组,即命令行参数
-
java xxx -g cruel world
-
args[0]:"-g";
-
args[1]:"cruel"
-
args[2]:"world"
-
函数中可调用args[]进行操作
-
数组排序
-
数值型
-
Arrays.sort(a);//优化的快速排序算法
-
抽取实验(取出不放回)
-
-
static String toString(type[] a)
-
返回 字符串 [1,2,3]形式
-
type为int、long、short、char、byte、boolean、float、double类型的数组
-
static type copyOf(type[] a,int length)
-
static type copyOf(type[] a,int start,int end)
-
返回与a类型相同的数组,长度为length,或者end-start,数组元素为a的值
-
包含start下标的值,不包含end下标的值
-
end可能大于a.length,其结果为0或false
-
length可能大于a.length,其结果为0或false
-
static void sort(type[] a)
-
static int binarySearch(type[] a,type v)
-
static int binarySearch(type[] a,int start,int end,type v)
-
二分搜索法查找值v
-
成功——>下标值
-
失败——>负数值r
-
-r-1是为了保持a有序v应插入的位置
-
static void fill(type[],type v)
-
将数组的所有数据元素值设为v
-
static boolean equals(type[] a,type[] b)
-
数组大小相同,对应下标元素相等——>true
-
static void arraycopy(Object from,int fromIndex,Object to,int toIndex,int count)
-
将第一个数组中的元素拷贝到第二个数组中
-
多维数组
-
多个下标访问数组元素
-
适合于表格或更加复杂的排列形式
-
声明
-
double[][] balances;
-
初始化
-
balances = new double[NYEARS][NYEARS]
-
int[][] balances={{1,2,3},{4,5,6},{7,8,9}}
-
-
赋值应该和声明一起
-
打印
-
Arrays.deepToString(a);
-
[[1,2,3],[4,5,6],[7,8,9]]
-
不规则数组
-
实际不存在多维数组,只有一维数组
-
多维数组:
-
数组的数组
-
声明
-
int[][] adds = new int[ NMAX + 1 ][];
-
分配行
-
for(int n = 0;n<=NMAX;n++)
-
adds[n] = new int[n + 1];
-
没超出边界,就可访问元素
-
for(int n = 0;n<adds.length;n++){
-
for(int k = 0;k<adds[n].length;k++){
-
adds[n][k] = num;
-
}
-
}
-
相当于创建了一个包含10个指针的一个数组
-
double** balances = new double*[10];
-
每个元素分配一个包含6个数值的数组
-
for(i = 0;i<10;i++){
-
balances[i] = new double[6];
-
}
-
只能单独创建行数组

浙公网安备 33010602011771号