3.10.6 BigInteger和BigDecimal
前面提到,在计算机中,使用二进制保存十进制小数是不精确的。但是在实际生产生活中,设计到金钱问题,必须做到精准,这种情况如何进行金额计算呢?再比如基本类型的小数和整数的数据范围是有限的,假设超出这个数据范围又如何进行数据计算呢?下面是大数计算与普通计算对比:
import java.math.BigDecimal;import java.math.BigInteger;
public class Main {
public static void main(String[] args){
BigInteger first = BigInteger.valueOf(Integer.MAX_VALUE);
BigInteger second = BigInteger.valueOf(Integer.MAX_VALUE);
System.out.println(first.add(second));
System.out.println(Integer.MAX_VALUE+Integer.MAX_VALUE);
BigDecimal bd = BigDecimal.valueOf(1.01);
BigDecimal bd2 = BigDecimal.valueOf(0.009);
System.out.println(bd.subtract(bd2));
System.out.println(1.01-0.009);
}
}
3.11 数组
声明+定义格式:
//动态格式type [] varriable = new type[len];
//静态格式
type [] varriable = new type[]{itemA,itemB};
下标从0开始,共len个,数组元素访问用 varriable[index] 表示
3.11.1 for Each
public class Main {public static void main(String[] args){
int[] x = new int[5];
int n = x.length;
for(int i = 0; i < n; i++){
x[i] = i;
}
for(int item:x){
System.out.println(item);
}
}
}
3.11.2 Arrays 工具类
Java工具类通常都是用类型末尾加s的方式来表示类名,例如:Objects,Arrays,Collections
常见API介绍:
Arrays
名称
含义
个人评价
void sort(int[] a)
快速排序(还有其他类型的数组排序,过程类似)
好用,常用,工作中非常好用
int binarySearch(long[] a, long key)
二分查找
好用,不太用到
boolean equals(int[] a, int[] a2)
比较两个数组是否相等
好用,代码严谨
void fill(int[] a, int val)
数组每个元素填相同值
好用
<T> T[] copyOf(T[] original, int newLength)
复制数组
好用,方便
int[] copyOfRange(int[] original, int from, int to)
按照索引范围复制数组
好用,不太常用
String toString(short[] a)
数组转字符串
好用,方便调试
String deepToString(Object[] a)
多维数组转字符串,或对象数组转字符串
非常好用
3.11.3 命令行参数
idea配置:
代码段:
public class Main {public static void main(String[] args){
for(String item:args){
System.out.println(item);
}
}
}
3.11.4 多维数组
public class Main {public static void main(String[] args){
double [][][] t = new double[10][10][10];
int [][] p = new int[][]{
{3,5,4,2},
{2,1,3,4},
{6,7,8,1},
{3,6,3,3},
};
}
}
3.11.5 不规则数组
有些情况,虽然是多维数组,但是数组中每行值的数目,我们希望是不一样的,例如杨辉三角:
杨辉三角可用于计算多项式系数,例如我们学过的
,系数为分别为[1,2,1],刚好符合 n=2 的情况; 也可用于计算组合数,如
,
,刚好对应着图中下标。
杨辉三角的规律是:每行第一个和最后一个数是1,其他数是上一行前一列与当前列的和。在除了第一维度,长度不确定的情况,在 java 中可先不定义:
int[][] a = new int[10][];打印10行杨辉三角代码如下:
public class Main {public static void main(String[] args){
int n = 10;
int[][] lines = new int[n][];
for(int i = 0; i < n; i++){
lines[i]=new int[i+1];
lines[i][0]=1;
for(int j = 1; j < i; j++){
lines[i][j]=lines[i-1][j-1]+lines[i-1][j];
}
lines[i][i]=1;
}
for(int i = 0; i < n; i++){
System.out.println(Arrays.toString(lines[i]));
}
}
}
其他:补充知识
问:访问数组外的地址空间会有什么后果?比如如下代码:
int[] x = new int[5];x[5]=10;
答:会报超出地址范围异常,如图:
问:循环中访问空数组会有什么后果?比如如下代码:
public class Main {public static void main(String[] args){
int[] x = null;
//1.for Each
// for(int item:x){
// System.out.println(item);
// }
//2.索引
for(int i = 0; i < x.length; i++){
System.out.println(x[i]);
}
}
}
答:会造成空指针异常,需要提前做检查
系列内容:
《Java 核心技术 卷1》 笔记:第一章 Java程序设计概述
《Java 核心技术 卷1》 笔记:第二章 Java程序设计环境
《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(1)
《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(2)
《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(3)
《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(4)
《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(5)
《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(6)
喜欢的话,点个赞吧~!平时做题,以及笔记内容将更新到公众号。
关注公众号,互相学习:钰娘娘知识汇总