1.数组(默认是一维数组)
(1)数组:可以存储多个元素并且多个元素是 同一种类型的容器
(2)数组的 定义:
数据类型[] 数组名;
数据类型 数组名[];
举例:
int[] a; 定义了一个int类型的数组变量a
int a[]; 定义了一个int类型 变量a数组
这两种方式的定义:虽然写法不一样,并且读法不一样,但是表达的效果一样,都是在定义一个数组,推荐使用第一种方式!
(2)数组的 定义:
数据类型[] 数组名;
数据类型 数组名[];
举例:
int[] a; 定义了一个int类型的数组变量a
int a[]; 定义了一个int类型 变量a数组
这两种方式的定义:虽然写法不一样,并且读法不一样,但是表达的效果一样,都是在定义一个数组,推荐使用第一种方式!
(3)数组的初始化:
1)动态初始化: 给数组指定长度,数组中的元素值由系统默认给定
1)动态初始化: 给数组指定长度,数组中的元素值由系统默认给定
2)静态初始化: 给定数组中元素的值,数组的长度由系统给定
1)
动态初始化
数据类型[] 数组名 = new 数据类型[数组长度] ;
举例:
int[] arr = new int[3] ; /*** * 左边: * int[] :定义的是一个int类型的数组 * arr : 数组名称 * 右边: * new :创建一个数组对象(它会在堆内存中存在) * int[] :当前int类型的数组 * 3:当前数组的长度是3 */
注意: 没有被初始化的数组是不能使用的!
如何获取数组中的元素?
/** * 获取数组中的元素:通过数组名称获取 * 格式: * 数组名称[索引值],数组的索引值从0开始,最大的索引=数组长度-1 */
2)静态初始化
定义格式
原始格式:
数据类型[] 数组名称 = new 数据类型[]{元素1,元素2,元素3....} ;
简写方式:
数据类型[] 数组名称= {元素1,元素2,元素3..} ;
举例:
int[] arr = new int[]{1,2,3} ;
原始格式:
数据类型[] 数组名称 = new 数据类型[]{元素1,元素2,元素3....} ;
简写方式:
数据类型[] 数组名称= {元素1,元素2,元素3..} ;
举例:
int[] arr = new int[]{1,2,3} ;
int[] arr = {1,2,3} ;
int[] arr2 = new int[3]{1,2,3} ; //
这种方式错误:动静结合
定义数组要么动态初始化,指定长度,要么静态初始化指定数组元素!
(5) 数组中经常会出现的异常:
ArrayIndexOutOfBoundsException:数组角标越界异常
出现的原因:访问了数组中不存在的索引值;
解决方案:观察数组中到底有索引值到多少; 数组长度-1
NullPointerException:空指针异常 (在实际开发中该异常是最多的)
出现的原因:对象为null,而开发者还要去使用对象,就会出现问题
解决方案:给某个对象进行非空判断,防止程序程序空指针异常
ArrayIndexOutOfBoundsException:数组角标越界异常
出现的原因:访问了数组中不存在的索引值;
解决方案:观察数组中到底有索引值到多少; 数组长度-1
NullPointerException:空指针异常 (在实际开发中该异常是最多的)
出现的原因:对象为null,而开发者还要去使用对象,就会出现问题
解决方案:给某个对象进行非空判断,防止程序程序空指针异常
建议:
对于异常: 将从头到尾,遇见到的异常建立文档,并列出出现该异常的原因以及如何解决异常!
(6)数组中的应用
1)给定一个数组,静态初始化的,遍历这个数组;
public static void printArray(int[] arr) { //左中括号 System.out.print("["); for(int x = 0 ; x < arr.length ; x ++) { //判断当前x是否是最后一个索引 if(x==arr.length-1) {//如果是最后一个索引的对应的元素 System.out.println(arr[x]+"]"); }else { System.out.print(arr[x]+", "); } } }
2)数组中的最值应用: 自定义一个数组,静态初始化,求数组中的最大值或者最小值;
public static int max(int[] arr) { //定义参照物 int max = arr[0] ; //遍历其他元素 for(int x = 1 ; x < arr.length ; x ++) { //获取到每一个元素,分别和参照物进行比较,如果大了,就作为最大值进行继续比较 if(arr[x] > max) { max = arr[x] ; } } return max ; }
3)定义一个数组,元素逆序(
保证数组的长度arr.length/2)
public static void reverse(int[] arr) { for(int x = 0 ; x < arr.length/2 ; x ++) { int temp = arr[x] ; arr[x] = arr[arr.length-1-x] ; arr[arr.length-1-x] = temp ; } }
4)数组中的元素基本查找法,定义一个数组,静态初始化,查找某个元素在该数组中第一次出现的索引
public static int findIndex(int[] arr,int value) { //遍历arr数组元素 for(int x = 0 ; x < arr.length ; x ++) { //判断:如果查找的元素恰好就是value值,那么直接返回该索引 if(arr[x] == value) { return x ; } } //不但要考虑找到的情况,还要考虑到找不到的情况 //在Java中,数组查找元素,如果找不到,返回-1 ,(找不到) return - 1; }
2.二维数组
(1)二维数组的定义:
1) 数据类型[] [] 数组名 = new 数据类型[m][n] ;
m:代表当前二维数组中有多少个一维数组
n:代表每一个一维数组中的长度
1) 数据类型[] [] 数组名 = new 数据类型[m][n] ;
m:代表当前二维数组中有多少个一维数组
n:代表每一个一维数组中的长度
2)二维数组的格式2
数据类型[][] 数组名 = new 数据类型[m][] ; //只给定有m个一维数组,每一个一维数组长度动态给定
比如:
//定义一个二维数组 int[][] arr = new int[3][] ;
3)二维数组的格式3(静态初始化)
数据类型[][] 数组名称 = {{元素1,元素2,元素3},{....}} ;
比如:
//定义一个二维数组,静态初始化 int[][] arr = {{1,2,3},{4,5},{6}} ;
(2)关于二维数组的遍历
public static void printArray(int[][] arr) { for(int x = 0 ; x < arr.length ; x ++) { for(int y = 0 ; y < arr[x].length ; y++) { System.err.print(arr[x][y]+" "); } } }
//外层循环:控制的是二维数组的长度;内层循环:控制的是一维数组的长度