大数据预科班第四天
复习
- 判断语句(if、if-else、if-else-if)
- 选择结构(switch-case)
- 循环结构(while、do-while、for 如果循环体只有一句,可以省略{},do-while必须有{})
数组
- 本质:一组数的容器,数组对每一个存入的数字都会自动编号,编号从0开始–即下标
数组定义格式:数据类型[] 变量名=new 数据类型[数组大小或者元素的个数];
int[] arr=new int[3];
表示一个可以存储3个整数的数组- 数组的大小一旦定义,长度不可以改变
存储和取用
存储:arr[0]=1;
取出:int x=arr[0];格式:1、先声明,后创建 2、声明时直接创建 3、声明时直接初始化(在定义好之后,数组的初始元素已经确定大小)
- 大小确定,内容不确定时用 int[] arr=new int[数组大小];
- 内容确定时用 int[] arr=new int[]{1,2,3,4};
- int[] arr={1,2,3,4}; 正确;在创建的时候,动态获取空间大小,然后创建并放置数据。
- int[] arr; arr={1,2}; 错误;因为不知道数组大小,不给予创建;用new先创建然后放置数据。
声明:只有引用,没有空间占用
初始化:在程序中第一次给变量赋值
[]可在前在后,放在前更容易与基本类型区分
数组的应用
- 获取数组中的元素:数组名[下标]
- 获取数组的长度:数组名.length
- 遍历数组:获取数组中的每一个数据;[0~length-1]用循环:比如for
- 获取数组中的最大值(循环+比较)
- 对数组进行排序
冒泡排序:相邻两个数进行比较,一次找一个最大的或是最小的(第n轮+第n轮的比较次数=数组长度)
public static int[] getOrderArray(int[] arr) {
for (int i = 1; i < arr.length; i++) {
for (int j = 1; j <= arr.length - i; j++) {
if (arr[j - 1] > arr[j]) {
int temp = arr[j - 1];
arr[j - 1] = arr[j];
arr[j] = temp;
}
}
}return arr;
}
选择排序:第n位和之后的数字相比较(选中某一位一次和其他位置比较,习惯上从0位开始依次比较)
public static int[] getOrderArray(int[] arr) {
for(int i=1;i<=arr.length;i++){
for(int j=i-1;j
内存
- 将内存分为5块:栈内存、堆内存、方法区、本地方法栈,寄存器
- 栈内存
#
存储变量,执行代码块,变量存储在栈内存中不会自动赋予初始值,变量使用完立即移除栈内存,释放空间 堆内存
#
存储对象,对象在堆内会自动赋予初始值,使用完后不会立即移除,会在一段时间后自动回收常见错误
编译没错,运行出错:语法没问题,逻辑或其他可能有错
- ArrayindexOutOfBoundsException数组下标越界
- NullPointException空指针异常,编译没有问题
扩展
- int i=1/0;//编译没错,运行出错
- 但是java中允许小数除以0,整数为无穷大,负数为负无穷大(Infinity/NaN)
- NaN:和任何数都不相等 ,和自身都不想等;只有isNaN才可以判断
- 尽量少用小数来作为控制条件,因为小数不精确
- strictfp(加在函数中):在程序执行过程中,小数是以80位二进制进行存储的,但是函数执行完用double来来存储,即用64位来进行存储
二维数组(数组的数组)
#- 定义格式:数据类型[][] 数组名=new 数组类型[二维数组的大小/二维数组中包含的一位数组的个数][所包含一维数组的大小];
eg:int[][] arr=new int[3][4];
表示一个包含3个一维数组,每一个一维数组由4个整数组成
eg:int[][] arr=new int[3][];
表示一个包含3个一维数组,每一个一维数组由长度任意;但是不能直接arr[2].length;因为这时候没有对象,应该初始化(开始为null,最后赋值为一维数组的地址)。
eg: int[][] arr={{1,1,2,3},{3,3}};
注:[]在变量前后不同;
之前会给之后的数据添加
之后的就是之后的
eg:int[] x,y[];
即x[],y[][]
- 定义格式:数据类型[][] 数组名=new 数组类型[二维数组的大小/二维数组中包含的一位数组的个数][所包含一维数组的大小];
- 遍历一个二维数组,需要两个循环
for(int i=0;i<arr.length;i++){
for(int j=0;i<arr[i].length;i++){
}
}