java核心技术复习笔记(三)

时间:2022-12-28 14:06:03

3.9大数值

    如果基本的整数和浮点数不能精度满足需求,可以使用java.math包中的两个类BigInteger和BigDecimal。这两个类可以包含任意长度数字序列的数值。BigInteger和BigDecimal分别实现了任意精度的整数运算和任意精度的浮点数运算。使用静态valueOf方法可以将普通的数值转换为大数值。
BigInteger a = BigInteger.valueOf(100);
遗憾的是不能使用人们熟悉的算术运算符处理大数值。需要使用.add,.multiply.divide(+*/);方法。
BigInteger c = a.add(b);//c=a+b
BigInteger d = c.multiplay(b.add(BigInteger.valueOf(2)));

BigInteger d = c.multiply(b.add(BigInteger.valueOf(2)));
java 没有提供运算符重载功能。程序员无法重定义+和*运算符,其使用应用于Biginteger类的add和multiply运算。java语言的设计为字符串的连接重载了+运算符,但没有其他的运算符,也没有给java程序员自己重载运算符的权利。

API java.math.bigInteger1.1
BigIngeter add(BigInteger other);
BigInteger subtract(BigInteger other);
BigInteger multiply(BigInteger other);
BigInteger divide(BigInteger other);
BigInteger mod(BigInteger other);
返回这个大整数和另一个大整数other的和,差,积,商以及余数。
int compareTo(BigInteger other)
如果这个大整数和另一个大整数other相等,返回0;如果这个大整数小于另一个大整数other,返回负数;否则返回正数。
static BigInteger valueOf(long x);
返回值等于x的大整数。

API java.math.BigInteger 1.1
BigDecimal add(BigDecimal other);
BigDecimal subtract(BigDecimal other);
BigDecimal multiply(BigDecimal other);
BigDecimal divide(BigDecimal other,RoundingMode mode)5.0;
返回这个大实数与另一个大实数other的和,差,积,商。想要计算商,必须给出舍入方式(rounding mode)。RoundingMode.HALF_UP 是我们学习的四舍五入方式。它适用于常规计算。有关其他舍入方式请参看API文档。
int compareTo(BigDecimal other)
static BigDecimal valueOf(long x);
static BigDecimal valueOf(long x,int scale);
返回值为x或x/10scale的一个大实数。

数组

数组是一种数据结构,用来存储同一类值型的集合。通过一个整型下标可以访问数组中的每一个值。形式为:
int []a = new int[数组元素个数];
想要获得数组中的元素个数,可以使用array.length;
一旦创建了数组,就不能再改变它的大小。

For each循环

    在java5.0中增加的一种功能性很强的循环结构,可以用来依次处理数组中的每一个元素,不必为指定下标值而分心。
格式为:for(variable:collection)statement;
其中 collection这一集合表达式必须是一个数组或是一个实现了Iterable
接口的类对象(例如ArrayList);
如果需要处理一个集合中的所有元素,使用for each循环语句非常合适。如果不希望遍历集合中的每一个元素,或者在循环内部需要使用下标值的情况下,还是要使用for循环。
有更加简单的打印数组中所有值的方式,即利用Arrays类的toString
方法。调用Array.toString(a);

数组初始化以及匿名数组:

int[]smallPrimes={2,3,5,7,9};

匿名数组:

new int[]{2,3,4,5,6,7}
smallPrimes = new int[]{17,19,15,13,11};
这是下列语句简写形式:
int[] anoymous = {1,2,3,4,5};
smallPrimes = anoymous;

数组拷贝:

数组变量拷贝,这时两个变量将引用同一个数组:
int[] luckuNumbers = smallPrimes;
luckyNumbers[5]= 12;//smallPrimes[5]也等于12;
如果希望将一个数组的所有值拷贝到一个新的数组中去,就要使用Arrays类的从copyOf方法:
int[] copiedLuckyNumbers = Arrays.copyOf(luckyNumbers,luckNumbers.length);
这个方法一般用作增加数组大小:
luckyNubers = Arrays.copyOf(luckyNumbers,luckNumbers.length*2);
如果数组元素时数值型,那么多余的元素被赋值为0,如果数组元素时布尔型,则将赋值为false。相反,如果长度小于原始数据的长度,则拷贝最前面的数据元素。
System.arraycopy(from,fromIndex,to,toIndex,count);

命令行参数:

数组排序:

Math.random();将返回一个0到1之间的随机浮点数。