Java读书笔记04 控制流程 大数值 数组
本文是Java基础知识部分 关于控制流程、大数值和数组。
控制流程
与C++不同的地方:
在C++中可以在嵌套的块中重定义一个变量,内层覆盖外层,但是Java不允许在嵌套的两个块中声明同名的变量。
Java的控制流程和C++的控制流程基本一样,只有很少例外的情况。没有goto语句,但break可以带标签,可以利用它以达到从内层循环中直接跳出外层循环的目的。
控制流程:
条件语句:if else
循环:while、 do while、for、
多重选择:switch
中断控制流程语句:
Java提供了一种带标签的break语句,用于跳出多重循环
注意:标签必须放在最外层的循环之前,并且必须紧跟一个冒号。
也可以将标签放在语句块前面,这样可以在该语句块中用break跳出到该语句块的后面。
continue语句将控制转移到内层循环的首部,用在for循环中时,跳到循环更新部分(for的第三部分),还有带标签的continue语句,跳到与标签匹配的循环首部。
大数值
当基本的整数和浮点数精度不能满足需求,可以使用java.math包中的BigInteger和BigDecimal。
使用静态的valueOf方法把普通数值转换为大数值:
BigInteger a = BigInteger.valueOf(100);
与C++不同,Java没有提供运算符重载功能。
大数值需要使用add、subtract、multiply、divide方法实现加减乘除。
计算商必须给出舍入方法,RoundingMode.HALF_UP是四舍五入。
数组
声明数组的两种形式:
int[] a;
int a[];
创建数组用new运算符:
int[] a = new int[100];
[]运算符会检查数组的边界,超出数组界限访问元素时会引发异常。
没有指针运算,即不能进行指针的加减。
a.length得到元素个数。
数组不能改变大小,如果需要在运行过程中扩展数组的大小,应该使用ArrayList。
循环遍历:
Java提供了一个类似于C#中的foreach语句:
for(variable:collection) statement;
循环集合中的每一个元素,而不需要使用下标值。
集合表达式必须是一个数组或者一个实现了Iterable接口的类。
例如:
for(int element:a)
System.out.println(element);
数组拷贝:
数组变量用=拷贝的时候,两个变量将引用同一个数组。
如果希望将一个数组的所有值拷贝到另一个数组去,需要使用System类的arraycopy方法。
System.arraycopy(from,fromIndex,to,toIndex,count)
main方法参数:
main方法参数String[] args接收一个字符串数组
执行java ClassName 后跟字符数组即可。
Arrays类中的方法:
java.util.Arrays
排序:static void sort(type[] a);
使用Arrays.sort(a);
这个方法使用了优化的快速排序算法。
查找:static int binarySearch(type[] a, type v)
使用二分搜索算法查找值v,找到则返回相应下标,否则返回一个负值。a为有序数组,返回的-r~1为保持有序v应插入的位置。
数组填充:fill。比较数组:equals。
多维数组:
多维数组其实被解释为数组的数组,所以可以构造不规则的数组。