Java的大数值和数组

1.Java的大数值

当基本类型的整型和浮点型的精度不能满足业务需要的时候,就要用到大数值,即BigInteger和BigDecimal。BigInteger实现了任意精度的整数运算,BigDecimal实现了任意精度的浮点数运算。BigDecimal类型在实际开发中用的比较多,因为涉及一些高精度的数值计算。
使用valueOf方法可以将普通数值转换为大数值。比如:BigInteger bi = BigInteger.valueOf(100);
但是,不能用平时最常见的+、-、*、/来对大数值进行计算,而是必须用大数值对象的add、subtract、multiply、divide方法进行运算。(以下方法是java.math.BigInteger 1.1)
BigInteger  add(BigInteger other)
BigInteger  subtract(BigInteger other)
BigInteger  multiply(BigInteger other)
BigInteger  divide(BigInteger other)
BigInteger  mod(BigInter other)








以上方法,返回大整数和大整数 other的和、差、积、商、余数。

int  compareTo(BigInteger other)
如果这个大整数和另一个大整数other相等,返回0;
如果这个大整数大于另一个大整数other,返回正数;
如果这个大整数小于另一个大整数other,返回负数;
static BigInteger  valueOf( long x)
返回值等于x的大整数;
关于BigDecimal大实数的一些常见方法如下。(以下方法是java.math.BigDecimal 1.1)
BigDecimal  add(BigDecimal other)
BigDecimal  subtract(BigDecimal other)
BigDecimal  multiply(BigDecimal other)
BigDecimal  divide(BigDecimal other, RoundingMode mode)
以上方法返回大实数和另一个大实数other的和、差、积。除法计算,必须给出舍入方式。RoundingMode.HALF_UP是最常见的四舍五入方式(0-4舍去,5-9进位)。其他的舍入方式查阅官方API。
int  compareTo(BigDecimal other)
如果这个大实数和另一个大实数other相等,返回0;
如果这个大实数大于另一个大实数other,返回正数;
如果这个大实数小于另一个大实数other,返回负数;
static BigDecimal  valueOf(long x)
static BigDecimal valueOF(long x, int scale)
以上两种方法返回一个x的大数值,返回一个x的scale次方的大数值。

2.Java的数组

数组是一种数据结构,是用来存储同一类型的集合。可以通过一个整数下标,来访问数组中的每一个值。
声明一个数组变量时,要指明是哪个类型,且其后要跟着一个[]符号,接下来是数组变量名。比如:int[]  a; 那么a就是一个int类型的数组变量。但a并没有初始化,还不是一个真正的数组,初始化一个数组变量要用new,比如:int[] a = new int[10]; 创建了可以存储10个int整型的数组。需要注意的是数组的下标是0~9,而不是1~10。
在创建一个数组时,所有的数值数组默认初始化值都是0,boolean数组初始化值都是false,对象数组的元素初始化值都是null。
在java的数组初始化中,a = new int[n],n可以是整型常量,也可以是已经初始化过的整型变量。

2.1 for each循环(针对数组的特殊的for循环)

java的这种功能很强的循环结构,可以用来依次处理数组中的每个元素,而不用为其指定数组下标。语法格式如:for( variable : collection ){  statement }
int[] a = new int[10];
for(int va : a)
{
   System.out.println(va);
}
// 将输出十个连续的0
虽然这个for循环结构功能很强,但在很多场合下仍然要使用传统的for循环结构,比如说不希望遍历数组中的每个元素,或者在循环内部需要用到数组的下标。这里提示,如果要打印一个数组中的所有元素,可以用Arrays类的toString(a)方法,打印之后的结果是这样的:“[0,0,0,0,0,0,0,0,0,0]”。

2.2数组的初始化和匿名数组

数组的初始化可以是这样的:int[] a = new int[10]{1,2,3,4,5},也可以是这样的:int[] a = {1,2,3,4}。那么两者有什么区别呢?前者是定义了一个能存储10个整型的数组,并且前5个元素为1、2、3、4、5,后五个元素都为0。而后者数组,是定一个能存储4个元素的整型数组,并且已经初始化为1、2、3、4。这就是他们的区别。后者在初始化的同时,也固定了数组的大小。
匿名数组,初始化一个匿名数组:new int[] {1,2,3}。
在Java中也有空数组,数组的长度为空,但和null不同。声明一个空数组,比如:int[] a = new int[0];

2.3数组的拷贝

在java中将一个数组变量拷贝给另一个数组变量,就是两个数组变量引用了同一个数组。
int[] a = new int[]{1,2,3,4,5,6};
int[] b = new int[10];
b=a;
System.out.print(Arrays.toString(b));//输出 [1,2,3,4,5,6]
a[0]=0;
System.out.print(Arrays.toString(b));//输出 [0,2,3,4,5,6]

如果是将数组全部拷贝,可以用Arrays类的copyOf方法。比如:int[] b = Arrays.copyOf(a, a.length);java的数组与C++不一样。
int[] a = new int[10];//java
//不同于
int a[10];//c++
//但等同于
int* a = new [10];

2.4命令行参数

在java中的main函数中 public static void main(String[] args); 其中args是一个字符串数组,用于命令行输入参数。在命令窗口中是这样使用的 java Abc a b 2 。解释一下,java是运行java的一个命令, Abc是类的名称,a、b、2是三个参数。“其实三个参数就被存储到了 args字符串数组中。

2.5数组的排序

简单的介绍几个数组排序使用的函数Arrays类的sort(a)快速排序、Arrays类的binarySearch(a)二分法排序,排序的具体算法,可以去百度一下,随后的文章中我也会写上。(以下方法在java.util.Arrays 1.2)
static String toString(type[] a)
返回包含a中元素的字符串,外面是中括号,里面元素用逗号隔开。比如:"[1,2,3,4,5]"
type 可以是char、byte、short、int、long、float、double、boolean
static type copyOf(type a, int length)
static type copyOf(type a, int start, int end)
返回与a类型相同的数组,长度为length或end-start,数组元素为a的值。
type 可以是char、byte、short、int、long、float、double、boolean
start  起始下标(包含这个值)
end  终止下标(不包含这个值)
static void sort(type[] a)
对数组a进行快速排序。
static int binarySearch(type[] a)
static int binarySearch(type[] a, int start, int end, type t)
采用二分搜索法查找t值。如果查找成功则返回t值所在的下标,否则返回一个负数值。注意:使用二分搜索法的前提是数组a是一个有序的数组,就是a已经排好序了。
type 可以是char、byte、short、int、long、float、double、boolean
start  起始下标(包含这个值)
end  终止下标(不包含这个值)
static void fill(type[] a, t)
用t填充数组a。
static boolean equals(type[] a, type[] b)
如果两个数组的大小相等,并且下标相等的元素都对应相等,则返回true,否则返回false。
type 可以是char、byte、short、int、long、float、double、boolean

2.6多维数组

多维数组可以使用多个下标访问数组元素。目前为止,先学二维数组。声明一个二维数组是这样的:int[][] a;与一维数组一样,这样初始化二维数组:a = new int[n][x],其中n和x可以是常量也可以是整型变量,但必须初始化。如果知道数组的元素,就不用new,可以这样声明并初始化:
int[][] a={
{1,2,3},
{2,2,2},
{5,6,7}
};

二维数组初始化过后,就可以通过下标来访问数组元素了。比如:int[i][j],比如:int[0][0]=1;

2.6.1多维数组中使用for each循环

针对数组的特殊for循环体,在这里也可以使用,比如:
int[][] a={
{1,2,3},
{2,2,2},
{5,6,7}
};

for(int[] row : a)
{
  for(int v : row)
  {
    System.out.print(v);
  }
}

如果要打印二维数组中的所有元素,可以用Arrays类的deepToString(a)方法。打印出来的结果:“[[1,2,3],[2,2,2],[5,6,7]]”

2.7不规则数组

所谓不规则数组,就是二维数组中每行的元素数量不一样。比如:
int[][] a={
{1,2,3},
{2,2,2,2},
{5,6,7,8,9}
};

要声明这样一个不规则数组,要先声明有多少行,然后再一行一行的声明。
int[][] a = new int[3][];  // 先声明了一共3行

声明了一共3行,然后再一行一行的声明。a[0][]={1,2,3};    a[1][]={2,2,2,2};   a[2][]={5,6,7,8,9};
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值