Java基础之数组

数组

  数组就是用于存储相同数据类型数据的一个容器。可以通过有规律的索引来访问没有规律的元素。

一维数组

  定义格式:元素的数据类型[ ] 数组名称 = new 元素的数据类型 [ 数组容器大小 ];

  数组定义格式解释:

    元素:数组中的数据,数组中的变量。

    数据类型:数组中的数据的数据类型,用来声明当前数组中,可以存放什么类型的数据。

    [ ]:表示是一个一维数组

    数组名称:数组本身也是一个变量,用于存储数组的地址的变量。所以,数组名称要符合标识符规范。

    =:赋值符号,将数组的地址,赋值给数组的名称

    new:新建,用于在堆内存中开辟一块空间,用来存储数据

    元素的数据类型:和前面的元素的数据类型保持一致

    数组容器的大小:可以存储数据的个数,数组长度必须给出,用于确定在内存中开辟多大的一块空间。

  数组初始化的格式:

    1.元素的数据类型[] 数组名称 = new 元素的数据类型[数组元素的个数];

    2.在程序书写的时候,就知道了数组中的元素是什么值,可以使用这一种

     元素的数据类型[] 数组名称 = new 元素的数据类型[] {元素值的罗列};

     可以简写为:元素的数据类型[] 数组名称 = {元素值的罗列};

数组的遍历

  遍历:把所有元素都访问一遍。

  方式:通过循环,访问到数组中所有元素的索引。通过索引,访问到对应元素。

  索引:角标、下标、脚标,表示某个元素在数组中的位置。范围:0 ~ 数组长度-1。数组长度:数组元素的个数,可以通过 数组名称.length 获取。

代码:

public static void main(String[] args) {
//	定义一个数组
	int[] arr = {12, 23, 34, 45, 56};
//	定义循环,获取到数组所有的索引,此时i不仅表示循环的控制,还表示数组的索引
	for (int i = 0; i < arr.length; i++) {
//		定义一个变量接收根据索引获得到的数组中的值,并打印出来
		int x = arr[i];
		System.out.println(x);
	}
}

  练习:

  1、定义一个方法,遍历一个一维数组。

    思路:通过循环,访问到数组中所有元素的索引。通过索引,访问到对应元素。
  2、定义一个方法,求一个一维数组中的最大值。

    思路:设置一个变量 max,作用是先代表数组中的最大值,遍历数组,让每个元素都和该变量比较,如果比最大值变量还要大,那么就让当前元素替换掉最大值变量中的数据。
  3、定义一个方法,将一个数组中的数据进行反转。

    思路:第一个变成最后一个,第二个变为倒数第二个。(0索引和arr.length-1索引位置对调,1索引和arr.length-2索引位置对调....,直到数组的最中间的元素,停止对调。

代码:

public static void main(String[] args) {
//	定义一个数组
	int[] arr = {16,80,33,43,42,57,29};
//	调用数组遍历方法,将数组作为一个实参传递
	method01(arr);
//	调用数组数组获取最大值的方法,将数组作为一个实参传递
	method02(arr);
//	调用数组数组反转的方法,将数组作为一个实参传递
	method03(arr);
}
	
//	定义一个有参数的数组遍历方法
public static void method01(int[] arr) {
//	循环遍历,获取所有的元素
	for (int i = 0; i < arr.length; i++) {
		System.out.println(arr[i]);
	}
}

//	定义一个有参数的数组获取最大值的方法
public static void method02(int[] arr) {
//	先假设数组的0号索引对应的值是最大值,将它复制给一个变量
	int max = arr[0];
//	循环遍历进行比较
	for (int i = 1; i < arr.length; i++) {
		//如果当前元素大于假设的最大值
		if (arr[i] > max) {
			max = arr[i];//就让当前元素将假设的最大值替换掉
		}
	}
	//循环结束之后,此时max就是数组中的最大值
	System.out.println("数组最大值为:"+max);
}
	
//	定义一个有参数的数组反转的方法
public static void method03(int[] arr) {
//	循环遍历比较,可以在for循环定义两个变量,一个索引从前向后,一个索引从后向前,
	for (int i = 0, j = arr.length - 1; i < j; i++, j--) {
		//i和j位置的元素,进行交换
		int temp = arr[i];
		arr[i] = arr[j];
		arr[j] = temp;
	}
}

二维数组

  二维数组:数组的每个元素,恰好又是一个数组。

  定义方式:

    int[][] arr = new int[3][];

    解释:定义一个二维数组,名字arr,数组中每个元素还是一个数组,但是元素对应的数组,没有被创建的,arr[0]  = null。

    注意:二维数组的长度,一定要给出的,[3]代表二维数组长度

    int[][] arr2 = {{},{4},{5,6,7}};

    解释:arr2是一个二维数组,里面有3个元素,对应三个数组,分别是{},{4},{5,6,7}

   注意:int [ ] [ ] arr = new int [0] [0];

    这样定义回抛出异常,因为arr[0]索引上的元素为{},是一个没有任何元素的数组,获取没有元素的数组的指定索引,会抛出数组索引越界异常 ArrayIndexOutOfBoundsException。

数组的注意事项

  1.在对数组进行操作时,先控制其值不为null,然后再判断数组的长度以免发生空指针异常。如果 int [ ] a = null,那么针对于数组的所有操作都将抛出空指针异常。

  2.其实,如果不判断数组的长度不为0,就进行数组的循环遍历,for循环是可以控制住不报错的但是最好将判断数组长度不为0写上这样比较严谨。

  3.int [ ] a = null;在内存中不开辟空间。int [ ] a = { };在内存中开辟空间,只不过数组中没有元素。

二维数组遍历代码:

public static void main(String[] args) {
//		定义一个二维数组
		int[][] arr2 = { {}, { 4 }, { 5, 6, 7 } };
//		 首先,先判断二维数组不能为null并且数组的长度不为0
		if (arr2 != null && arr2.length != 0) {
//			利用for循环,遍历二维数组的每一个元素
			for (int i = 0; i < arr2.length; i++) {
//				二维数组的每一个元素又是一个数组,所以还需要判断数组不能为null并且数组的长度不为0
				if (arr2[i] != null && arr2[i].length != 0) {
//					利用for循环,遍历二维数组的每一个一维数组中的元素
					for (int j = 0; j < arr2[i].length; j++) {
						int z = arr2[i][j];
//						在一行输出每个一维数组中的元素,用,分隔
						System.out.print(z+",");
					}
//					每输出完一个一维数组,换行
					System.out.println();
				} else {
					System.out.println("一维数组不能为null并且数组长度不能为0");
				}
			}
		}else {
			System.out.println("二维数组不能为null并且数组长度不能为0");
		}
}

  

 练习:

  分析以下需求,并用代码实现:
  (1)定义一个int类型的一维数组,内容为{6,2,9,15,1,5,20,7,18}
  (2)将数组最大元素与最后一位元素进行交换,最小元素与第一位元素进行交换,并打印数组,最后效果{1,2,9,15,6,5,18,7,20}
  提示思路:先查找最大值和最小值出现的索引。

代码实现:

public static void main(String[] args) {
		int[] arr = {6,2,9,15,1,5,20,7,18};//{1,2,9,15,6,5,18,7,20}
		//判断数组不能为null并且数组长度不能为0
		if(arr != null&&arr.length != 0){
			//判断数组中的元素个数是否为1,如果只有一个数,直接输出
			if(arr.length == 1){
				System.out.println(arr[0]);
			//判断数组中元素个数是否为2,如果有两个,判断大小,最后输出结果
			}else if(arr.length == 2){
				if(arr[0]>arr[1]){
					int temp = arr[0];
					arr[0] = arr[1];
					arr[1] = temp;
				}
				for(int i = 0;i<arr.length;i++){
					System.out.print(arr[i]+",");
				}
			//判断数组中的数据个数是否为2个以上
			}else if(arr.length > 2){
				//定义几个变量假设是最小值,最大值,最小值的索引,最大值的索引
				int min = arr[0];
				int max = arr[arr.length-1];
				int minIndex = 0;
				int maxIndex = arr.length-1;
//				使用for循环进行遍历
				for(int i = 0;i<arr.length;i++){
//					找到最小值和最小值的索引
					if(arr[i]<min){
						minIndex = i;
						min = arr[i];
					}
//					找到最大值和最大值的索引
					if(arr[i]>max){
						maxIndex = i;
						max = arr[i];
					}
				}
				//将最小值和第一个数替换
				int tempMin = arr[minIndex];
				arr[minIndex] = arr[0];
				arr[0] = tempMin;
				//将最大值和最后一个数替换
				int tempMax = arr[maxIndex];
				arr[maxIndex] = arr[arr.length-1];
				arr[arr.length-1] = tempMax;
//				for循环遍历输出最后结果
				for(int i = 0;i<arr.length;i++){
					System.out.print(arr[i]+",");
				}
			}
		}else{
			System.out.println("数组不能为null并且数组长度不能为0");
		}
}

  

原文地址:https://www.cnblogs.com/w998/p/11257957.html