第二周学习记录之数组

一维数组

概念:是一种"容器",可以存储同一类型元素的容器.
定义:
数据类型[] 数组名称
数据类型 数组名称[]
数组的初始化:
动态初始化:开发者定义数组初始化的时候,指定数组的长度,系统默认给数组中的元素赋值.
静态初始化:直接指定数组的元素内容,系统指定的数组长度

数组的动态初始化

		数据类型[] 数组名称 = new 数据类型[数组长度] ;
		数据类型 数组名称[] = new 数据类型[数组长度] ;
	举例:
			定义一个数组并且动态初始化
			int[] arr = new int[3] ;
			int arr[] = new int[3] ;
			=号左边:
				int:数组中的存储的是基本类型int类型元素
				[]:表示一个一维数组
				arr:表示数组的对象名称
			=号右边:
				new :在堆内存中产生一个空间地址(申请空间)
				int:数组中的存储的是基本类型int类型元素
				[]:表示一个一维数组
				3:指定数组的长度 

举例:

class ArrayDemo{
	public static void main(String[] args){
		
		//创建一个数组对象,并且动态初始化
		int[] arr = new int[3] ;
		System.out.println(arr);
		//[I@6d06d69c 组成:[表示一个维数组  I(int类型) @:表示地址值标记 后面就是一堆十六进制数据
		//打印一个数组名称:产生一个地址值, 如何确定元素的内容:
		/*
			访问数组的元素:	
				给数组中的元素进行编号,从0开始编号,一直到 取到数组的最大长度-1为止
			将编号以及数组名称配合使用:
			
				数组名称[索引值(数组的角标)]
		*/
		arr[1] = 100 ;
		//数组动态初始化 int[] arr = new int[3] ; 指定数组长度,系统默认给元素进行分配(默认值)
		System.out.println(arr[0]) ;//输出数组内的第一个元素
		System.out.println(arr[1]) ;//输出数组内的第二个元素
		System.out.println(arr[2]) ; //输出数组内的第三个元素
		
	}
}

数组的静态初始化

指定的元素的内容,系统默认长度!

静态的初始化的格式:

标准格式:
数据类型[] 数组名称 = new 数据类型[]{元素1,元素2,元素3,} ;
数据类型 数组名称[] = new 数据类型[]{元素1,元素2,元素3,} ;

简写方式:(推荐)
数据类型[] 数组名称 = {元素1,元素2,元素3,} ;
数据类型 数组名称[] = {元素1,元素2,元素3,} ;

int[] arr = new int[]{1,2,3} ;
int[] arr = {1,2,3} ;

注意:
int[] arr = new int[2]{10,20} ; 是错误的,动态初始化和静态初始化一块使用了!

class ArrayDemo{
	public static void main(String[] args){
		
		//定义一个数组,静态初始化
		int[] arr = {7,8,9,10} ;
		System.out.println(arr) ;
		System.out.println(arr[0]) ;
		System.out.println(arr[2]) ;
		System.out.println(arr[3]) ;
	}
}

数组中的异常

数组中会遇见的一些异常:

异常:Throwable 类
异常分为两大类:
		Error:程序出现了严重的问题;
		Exception:
			RuntimeException:运行时期异常 
				java.lang.ArrayIndexOutOfBoundsException属于运行时期异常的一种
				java.lang.NullPointerException属于运行时期异常的一种
					
			编译时期异常(只要不是RuntimeException的异常都属于编译时期)
	

	java.lang.ArrayIndexOutOfBoundsException:属于运行时期异常的一种
					数组角标越界异常
							出现的原因:访问了数组中不存在的角标值
							解决方案:更改角标在范围内即可!
										
	java.lang.NullPointerException:空指针异常(引用类型中经常会出现的异常!)
	出现的原因:
			代码结构不严谨(某个对象已经为null,还有使用这个对象调用方法或者访问元素...)
	解决方案:
			只要 给对该对象进行非空判断
			如果该对象不为空,才能使用这个对象完成一些操作!
class ArrayAbnormal{
	public static void main(String[] args){
		
		//定义一个数组,静态初始化
		int[] arr = {1,2,3} ; //new int[]{1,2,3} ;
		
		System.out.println(arr[0]);
		System.out.println(arr[1]);
		//该数组最大的角标值是2
		//System.out.println(arr[3]);  //java.lang.ArrayIndexOutOfBoundsException  :数组角标越界
		
		//引用类型的默认值是null
		//arr = null ;
		//System.out.println(arr[0]) ; //java.lang.NullPointerException:空指针异常
		
		arr = null ;
		//加入一个逻辑判断:非空判断
		if(arr!=null){
			System.out.println(arr[0]) ;
		}else{
			System.out.println("该对象为空了,不能再使用这个对象了") ;
		}
	}
}

数组的应用

数组的遍历

将数组的元素进行遍历
遍历:就是将元素的内容一一输出出来!

class ArrayTest{
	public static void main(String[] args){
		//定义一个数组,静态初始化
		int[] arr = {57,69,80,13,22} ;
		
		
		//如何访问数组中的元素:数组名称[索引值]
		
		//调用
		//将数组中的数据遍历出来
		printArray(arr);
		//需求:遍历arr数组,最终以 [元素1, 元素2, 元素3, ....元素n]格式出现  变成功能
		printArray2(arr) ;
		
	}
	//最终版代码:遍历数组
	public static void printArray2(int[] array){
		//拼接左中括号
		System.out.print("[") ;
		//遍历array数组
		for(int x = 0 ; x < array.length; x ++){//x角标
			//获取到每一个元素
			//判断:如果x取到最大索引值,---->取到最后一个元素了
			if(x==array.length-1){
				//最后一个元素,输出元素内容以及右中括号
				System.out.println(array[x]+"]") ;
			}else{
				//不是取到最大索引值,将中间的元素按照按照格式输出(元素+逗号+空格)
				System.out.print(array[x]+", ") ;
			}
		
		}
	}
	
	/*
		遍历的功能
		定义一个方法
		
			两个明确
				1)明确返回值类型:void 
				2)明确参数类型以及参数格式
					int类型的数组  1个参数
	*/ 
	public static void printArray(int[] array){//方法的形式参数:传递的是一个引用类型:数组
		for(int x = 0 ; x < array.length ; x ++){
			System.out.println(array[x]) ;
		}
	}
	
}

求数组的最大值

求数组中最大值/最小值

分析:
	1)定义数组,静态初始化
	2)定义一个参照物,数组中的第一个元素(它就是一个最大值)
	3)从角标1遍历后面的元素,获取到每一个元素
		判断:
			如果后面的元素都大于max了,
			将该元素赋值max
	4)输出max值

举例:

class ArrayTest2{
	public static void main(String[] args){
		//1)定义数组,静态初始化
		int[] arr = {57,69,80,13,22} ;//new int[]{57,69,80,13,22} ;
		
		//定义一个参照物
		int max = arr[0] ;
		
		//遍历后面的元素:从索引1开始
		for(int x =1 ; x < arr.length ; x ++){
			//判断 如果后面的元素都大于max了,
			if(arr[x] > max){
				//将该元素赋值max
				max = arr[x] ;
			}
		}
		
		System.out.println("数组中的最大值是:"+max);
		System.out.println("---------------------");
		
		//赋值调用
		int max2 = getMax(arr) ; //调用这个方法,实际参数需要:该数组对象 
		System.out.println("max2:"+max2) ;
		
		//最小值:自己完成!
		
	}
	
	//定义一个获取数组最大值的方法
	/*
		两个明确
			1)明确返回值类型: int类型
			2)参数类型以及参数个数
			int类型的数组 1个参数
	*/
	public static int getMax(int[] array){ //形式参数传递的是一个数组,方法调用,实际参数需要改数组的对象
			//定义一个参照物
		int max = array[0] ;
		
		//遍历后面的元素:从索引1开始
		for(int x =1 ; x < array.length ; x ++){
			//判断 如果后面的元素都大于max了,
			if(array[x] > max){
				//将该元素赋值max
				max = array[x] ;
			}
		}
		return max ;
	}
}

元素的逆序

元素逆序:
	特点:
			arr:是一个数组
		将0索引对应的元素和arr.length-1索引对应的元素进行互换
		将1索引对应的元素和arr.length-1-1索引对应的元素进行互换
		...
		...
		只要保证  数组长度 arr.length/2

举例:

class ArrayTest3{
	public static void main(String[] args){
	
		//定义一个数组,静态初始化
		int[] arr = {57,87,96,13,24} ;
		
		//在逆序之前,先去遍历这个数组(将元素一一打印)
		System.out.println("逆序之前:") ;
		printArray(arr) ;
		
		//逆序
		//调用逆序的功能
		reverse(arr) ;
		reverse2(arr) ;
		
		//遍历一下
		System.out.println("逆序后:");
		printArray(arr) ;	
	}
	//方式2
	public static void reverse2(int[] arr){
		//在一个for循环中定义一个两个变量
		//start:表示开始索引
		//end:最终最大索引
		for(int start = 0,end = arr.length -1 ; start<=end ;start ++,end -- ){
			//中间第三方变量
			int temp = arr[start] ;
			arr[start] = arr[end] ;
			arr[end] = temp ;
		}
	}
	
	/*
		定义一个逆序的功能
		两个明确:
			1)明确返回值类型:void
			2)明确参数类型以及参数个数
				int类型的数组 1个参数
	*/
	
	//方式1;
	public static void reverse(int[] arr){
		//将0索引对应的元素和arr.length-1索引的元素进行互换
		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 ;
		}
	}
	
	
	//遍历的功能
	public static void printArray(int[] arr){
		//先拼接左中[
			System.out.print("[") ;
			for(int x = 0 ; x < arr.length ; x ++){
				//如果角标是最大索引值:最后一个元素
			if(x==arr.length-1){
				System.out.println(arr[x]+"]") ;
			}else{
				System.out.print(arr[x]+", ") ;
			}
		}
	}

}

二维数组

定义:一个元素为一维数组的数组		
定义格式:
数据类型[] 数组名称[] ;
数据类型[][] 数组名称 ;

动态初始化:

	格式1:
		数据类型[][] 数组名称 = new 数据类型[m][n] ;
	举例:
		 int[][] arr = new int[3][2] ;
	=号左边:
		int:当前数组存储的是int类型的元素
		[][]:定义的是一个二维数组
		arr :数组对象名称
	=号右边:
		new :在堆内存中创建该数组的对象(产生堆内存空间地址)
		int:当前数组存储的是int类型的元素
		[3]:当前定义的这个二维数组中有3个一维数组
		[2]:每一个一维数组中有2个长度

举例:

class ArrayDemo{
	public static void main(String[] args){
		//格式1:
		 int[][] arr = new int[3][2] ;
		 System.out.println(arr);//[[I@6d06d69c	输出整个二维数组
		 System.out.println(arr[0]) ;//[I@7852e922输出第一个一维数组
		 System.out.println(arr[1]) ;//[I@4e25154f输出第二个一维数组
		 System.out.println(arr[2]) ;//[I@70dea4e输出第三个一维数组
		 
		 System.out.println(arr[0][1]) ;	//输出第一个一维数组里的第二个元素
		 System.out.println(arr[1][1]) ;	//输出第二个一维数组里的第二个元素
		 
		 arr[0][1] = 10;
		 arr[0][0] = 20 ;
		 arr[1][1] = 40 ;
		 System.out.println("-----------------------") ;
		 System.out.println(arr);//[[I@6d06d69c
		 System.out.println(arr[0]) ;//[I@7852e922
		 System.out.println(arr[1]) ;//[I@4e25154f
		 System.out.println(arr[2]) ;//[I@70dea4e
		 
		 System.out.println(arr[0][1]) ;
		 System.out.println(arr[1][1]) ;
	}
}
格式2:
	指定了一维数组的个数,一维数组的长度需要动态给定
	数据类型[][] 数组名称 = new 数据类型[m][] ;

举例:
	int[][] arr = new int[3][] ;

举例:

class ArrayDemo{
	public static void main(String[] args){
		//格式2:
		int[][] arr = new int[2][] ;
		//二维数组中有2个一维数组,长度不知道,得动态给定长度
		System.out.println(arr) ;//二维数组的地址值[[I@十六进制数据  //[[I@6d06d69c
		//动态给定义2个一维数组的长度
		arr[0] = new  int[2] ; //第一个一维数组给定了2个长度
		arr[1] = new  int[3] ;//第二个一维数组给定了3个长度
		System.out.println(arr[0]) ; //[I@7852e922
		System.out.println(arr[1]) ;//[I@4e25154f
		
		System.out.println(arr[0][1]) ;
		System.out.println(arr[1][0]) ;
		System.out.println(arr[1][2]) ;
		
		//赋值
		arr[0][0] = 10 ;
		arr[0][1] = 20 ;
		arr[1][1] = 50;
		arr[1][2] = 40 ;
	}
格式3:
	就是静态初始化
	数据类型[][] 数组名称 =
			new 数据类型[][]{{元素1,元素2,元素3..},{元素1,元素2,元素3,...},{,}};
简写格式:
	数据类型 [][] 数组名称 = {{元素1,元素2,元素3..},{元素1,元素2,元素3,...},{,}};
			
	举例
		int[][] arr = new int[][]{{1,2,3},{4,5,6},{7,8,9}} ;
		
		-->简写格式
		int[][] arr = {{1,2,3},{4,5,6},{7,8,9}} ;

二维数组的应用

遍历

外层循环:其实是一维数组的个数(arr.length)
内层循环:其实每一个一维数组的长度(arr[x].length)

最终让你以:{{1,2,3},{4,5},{6}}按照这个格式
class Array2Test{
	public static void main(String[] args){
		
		//定义一个二维数组,静态初始化:
		int[][] arr = {{1,2,3},{4,5},{6}};  
	
		//调用遍历的功能
		printArray2(arr) ;
	}
	
	public static void printArray2(int[][] arr){
		//输出以下左大括号
		System.out.print("{");
		//遍历
		for(int x = 0 ; x < arr.length; x++){//外层循环是一维数组的个数
			//先输出左大括号
			System.out.print("{");
			//遍历一维数组的元素
			for(int y = 0 ; y < arr[x].length ; y++){
				//判断
				//如果是二维数组的最后一个元素
				if(x == arr.length-1){
					//输出元素值以及后面的}
					System.out.print(arr[x][y]+"}") ;
					
					//如果当前元素取到的一维数组的最后一个元素
				}else if(y == arr[x].length-1){
					//输出元素内容以及}以及,
					System.out.print(arr[x][y]+"}"+",") ;
				}else{
					System.out.print(arr[x][y]+",") ;
				}
			}
			
		}
		//输出整个右}
		System.out.print("}");
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值