当前位置 : 主页 > 编程语言 > java >

《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(7)大数处理、数

来源:互联网 收集:自由互联 发布时间:2022-07-13
3.10.6 BigInteger和BigDecimal 前面提到,在计算机中,使用二进制保存十进制小数是不精确的。但是在实际生产生活中,设计到金钱问题,必须做到精准,这种情况如何进行金额计算呢?再比


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);

}
}

《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(7)大数处理、数组、多维数组、控制台传参_开发语言

 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);
}
}
}

 

《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(7)大数处理、数组、多维数组、控制台传参_好用_02

 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配置:

《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(7)大数处理、数组、多维数组、控制台传参_数组_03

 

《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(7)大数处理、数组、多维数组、控制台传参_开发语言_04

代码段:

public class Main {
public static void main(String[] args){
for(String item:args){
System.out.println(item);
}
}
}

 

《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(7)大数处理、数组、多维数组、控制台传参_java_05

 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 不规则数组

有些情况,虽然是多维数组,但是数组中每行值的数目,我们希望是不一样的,例如杨辉三角:

《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(7)大数处理、数组、多维数组、控制台传参_开发语言_06

杨辉三角可用于计算多项式系数,例如我们学过的

《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(7)大数处理、数组、多维数组、控制台传参_后端_07

,系数为分别为[1,2,1],刚好符合 n=2 的情况; 也可用于计算组合数,如

《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(7)大数处理、数组、多维数组、控制台传参_开发语言_08

,

《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(7)大数处理、数组、多维数组、控制台传参_数组_09

,刚好对应着图中下标。

杨辉三角的规律是:每行第一个和最后一个数是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;

答:会报超出地址范围异常,如图:

《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(7)大数处理、数组、多维数组、控制台传参_开发语言_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基本的程序设计结构(7)大数处理、数组、多维数组、控制台传参_数组_11

 

 系列内容:

《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)

喜欢的话,点个赞吧~!平时做题,以及笔记内容将更新到公众号。

关注公众号,互相学习:钰娘娘知识汇总

《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(7)大数处理、数组、多维数组、控制台传参_开发语言_12

网友评论