第5章数组ppt课件.ppt
第5章数组ppt课件 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望第第5章章 数组数组n n5.1 数组概述数组概述n n5.2 一维数组一维数组n n5.3 二维数组二维数组n n5.4 数组的基本操作数组的基本操作 主要内容主要内容5.1 数组概述数组概述n数组元素数组元素有以下五个主要特征有以下五个主要特征数组数组是是相同数据类型相同数据类型元素的集合。元素的集合。数组数组元素元素在内存中按先后顺序存放。在内存中按先后顺序存放。每个数组元素都用每个数组元素都用数组名数组名及及下标下标表示。表示。数组下标从数组下标从0开始开始每个数组都有每个数组都有长度长度,即元素个数。,即元素个数。5.2 一维数组一维数组n5.2.1 创建一维数组创建一维数组n5.2.2 初始化一维数组初始化一维数组5.2.1 创建一维数组创建一维数组n在使用数组之前,必须首先定义数组变量在使用数组之前,必须首先定义数组变量所所属的类型属的类型,即,即声明数组声明数组n声明一维数组有两种形式,语法如下所示:声明一维数组有两种形式,语法如下所示:数组元素类型数组元素类型 数组名字数组名字;数组元素类型数组元素类型 数组名字数组名字;5.2.1 创建一维数组创建一维数组n数组的声明(数组的声明(Declaration)声明数组时声明数组时无需指明数组元素的个数无需指明数组元素的个数,也,也不为数组元素分配内存空间不为数组元素分配内存空间不能直接使用,必须经过初始化分配内存不能直接使用,必须经过初始化分配内存后才能使用后才能使用n声明数组后,要想使用数组还要声明数组后,要想使用数组还要为其分配内存为其分配内存空间,分配内存空间时必须指明数组的长度空间,分配内存空间时必须指明数组的长度。n数组数组使用使用new关键字关键字进行内存分配。进行内存分配。n分配内存空间的语法如下所示:分配内存空间的语法如下所示:5.2.1 创建一维数组创建一维数组数组名字数组名字=new 数组元素类型数组元素类型数组元素个数数组元素个数;n也可以在创建数组时直接为变量进行赋值。也可以在创建数组时直接为变量进行赋值。数组元素类型数组元素类型 数组名数组名=new数组元素类型数组元素类型数组元素个数数组元素个数;5.2.1 创建一维数组创建一维数组n用关键字用关键字new构成数组的创建表达式,可以构成数组的创建表达式,可以指定数组的类型和数组元素的个数指定数组的类型和数组元素的个数。n元素个数可以是常量也可以是变量。元素个数可以是常量也可以是变量。n基本类型数组的每个元素都是一个基本类型基本类型数组的每个元素都是一个基本类型的变量;的变量;n引用类型数组的每个元素都是对象的引用引用类型数组的每个元素都是对象的引用。5.2.1 创建一维数组创建一维数组arryName=new Typecomponets number;例如:例如:int ai;ai=new int10;String s;s=new String3;或者或者可以将数组的声明和创建一并执行可以将数组的声明和创建一并执行int ai=new int10;可以在一条声明语句中创建多个数组可以在一条声明语句中创建多个数组 String s1=new String3,s2=new String8;5.2.2 初始化一维数组初始化一维数组n数组可以与基本数据类型一样进行初始化操数组可以与基本数据类型一样进行初始化操作,数组的初始化可分别初始化数组中每个作,数组的初始化可分别初始化数组中每个元素。元素。n数组的初始化有两种形式,如下所示:数组的初始化有两种形式,如下所示:int arr=new int1,2,3,5,25;int arr2=34,23,12,6;5.2.2 初始化一维数组初始化一维数组n声明数组名时,给出了数组的初始值声明数组名时,给出了数组的初始值,程序便会,程序便会利用数组初始值创建数组并对它的各个元素进行利用数组初始值创建数组并对它的各个元素进行初始化初始化 int a=22,33,44,55;n创建数组的时,如果没有指定初始值创建数组的时,如果没有指定初始值,数组便被,数组便被赋予默认值初始值。赋予默认值初始值。基本类型数值数据,默认的初始值为基本类型数值数据,默认的初始值为0;boolean类型数据,默认值为类型数据,默认值为false;引用类型元素的默认值为引用类型元素的默认值为null。数组的引用数组的引用 n通过下面的表达式引用数组的一个元素:通过下面的表达式引用数组的一个元素:arrayNameindex数组下标必须是数组下标必须是 int,short,byte,或者或者 char下标从零开始计数下标从零开始计数元素的个数即为元素的个数即为数组的长度数组的长度,可以通过,可以通过 arryName.length引用引用元素下标最大值为元素下标最大值为length-1,如果如果超过最超过最大值,将会产生数组越界异常大值,将会产生数组越界异常数组的引用数组的引用n数数组组名是一个引用:名是一个引用:inta1=1,2,3,4,5;inta2;a2=a1;for(inti=0;ia2.length;i+)a2i+;for(inti=0;ia1.length;i+)System.out.println(a1+i+=+a1i);数组元素的赋值:随机数数组元素的赋值:随机数 1.通过通过Math类生成随机数类生成随机数Math.random()默认生成默认生成0.0,1.0)的的double型随机数,型随机数,即即0=Math.random()1.0(int)(Math.random()*N)M+(int)(Math.random()*(N-M)数组元素的赋值:随机数数组元素的赋值:随机数 2.使用使用Random类生成随机数类生成随机数 java.util.Random类类Random r=new Random();r.nextInt()/产生一个随机整数产生一个随机整数 r.nextInt(int n)/产生产生 0,n)之间的随机整数之间的随机整数 r.nextFloat()/产生一个随机浮点数值产生一个随机浮点数值 r.nextDouble()/产生一个随机双精度数值产生一个随机双精度数值常用的数学运算方法常用的数学运算方法nMath类包含了所有用于数学运算的函数方类包含了所有用于数学运算的函数方法,这些方法都是静态的法,这些方法都是静态的n方法的调用格式:方法的调用格式:“Math.数学方法数学方法”n在在Math类中除了函数方法之外还存在两个类中除了函数方法之外还存在两个常用数学常量,分别为常用数学常量,分别为圆周率、圆周率、E:Math.PIMath.E常用的数学运算方法常用的数学运算方法1.三角函数类三角函数类:Math.sin(double x)Math.cos(double x)Math.tan(double x)2.指数函数类:指数函数类:Math.exp(double x)/exMath.log(double x)/lnxMath.sqrt(double x)/x1/2Math.pow(double x,double y)/xy5.3 二维数组二维数组 n5.3.1 创建二维数组创建二维数组 n5.3.2 初始化二维数组初始化二维数组5.3.1 创建二维数组创建二维数组 n声明二维数组的方法有两种,语法:声明二维数组的方法有两种,语法:数组元素类型数组元素类型 数组名字数组名字 ;数组元素类型数组元素类型 数组名字数组名字;n二维数组可以看成由多个一维数组所组成二维数组可以看成由多个一维数组所组成,在给二位数组分配内存时,可以为这些一维在给二位数组分配内存时,可以为这些一维数组同时分配相同的内存。数组同时分配相同的内存。n第一个方括号中数字是一维数组的个数,第第一个方括号中数字是一维数组的个数,第二个方括号中数字是这些一维数组的长度。二个方括号中数字是这些一维数组的长度。5.3.1 创建二维数组创建二维数组对于多维数组有两种为数组分配内存的方式。对于多维数组有两种为数组分配内存的方式。1)直接为每一维分配内存空间。)直接为每一维分配内存空间。n为每一维数组分配内存,实例代码如下:为每一维数组分配内存,实例代码如下:a=new int24;5.3.1 创建二维数组创建二维数组2)可分别为每一维分配内存)可分别为每一维分配内存n分别为每一维分配内存,实例代码如下:分别为每一维分配内存,实例代码如下:a=new int2;a0=new int2;a1=new int3;5.3.2 初始化二维数组初始化二维数组n二维数组的初始化同一维数组初始化类似,二维数组的初始化同一维数组初始化类似,同样使用同样使用大括号大括号完成二维数组的初始化。完成二维数组的初始化。n语法:语法:type arrayname=value1,value2valuen;每个每个value都是一都是一个大括号定义的个大括号定义的新一维数组新一维数组说明:对于整型二维数组,创建成功之后系说明:对于整型二维数组,创建成功之后系统会赋给数组中每个元素初始化值统会赋给数组中每个元素初始化值0 0。int myarr=12,0,45,10;5.4 数组的基本操作数组的基本操作 n5.4.1 遍历数组遍历数组 n5.4.2 复制数组复制数组 n5.4.3 填充数组填充数组n5.4.4 排序数组元素排序数组元素n5.4.5 查找数组元素查找数组元素 5.4.1 遍历数组遍历数组n遍历数组有两种常用的方式,使用遍历数组有两种常用的方式,使用for循环循环和使用和使用foreach循环循环。n两者的区别在于两者的区别在于for循环能够在遍历过程中循环能够在遍历过程中修改修改数组中的元素,而数组中的元素,而foreach循环不行。循环不行。5.4.1 遍历数组遍历数组【例例5-1】循环输出数组中的元素循环输出数组中的元素 intarray=newint5;for(inti=0;iarray.length;i+)arrayi=i;System.out.println(数组中的元素:);for(inti:array)System.out.print(i+);遍历二维数组遍历二维数组for语句语句n遍历二维数组需使用双层遍历二维数组需使用双层for循环,通过数组循环,通过数组的的length属性属性可获得数组的长度。可获得数组的长度。intb=newint1,2,3,4,5,6;for(inti=0;ib.length;i+)for(intj=0;j=0,小于小于original数组元素的个数。数组元素的个数。to:要复制范围的最后索引位置。可以大于数要复制范围的最后索引位置。可以大于数组组arr的长度。的长度。新数组不包括索引是新数组不包括索引是to的元素。的元素。5.4.2 复制数组复制数组【例例5-2】复制数组复制数组intarray=1,2,3,4;intarrayCopy=Arrays.copyOf(array,6);intarrayRangeCopy=Arrays.copyOfRange(array,2,6);System.out.print(原数组:);for(inti:array)System.out.print(i+);System.out.println();5.4.2 复制数组复制数组【例例5-2】复制数组复制数组System.out.print(复制数组:);for(inti:arrayCopy)System.out.print(i+);System.out.println();System.out.print(部分复制数组:);for(inti:arrayRangeCopy)System.out.print(i+);5.4.2 复制数组复制数组nSystem提供了一个静态方法提供了一个静态方法arraycopy(),可,可以用来实现数组之间的复制。其函数原型是:以用来实现数组之间的复制。其函数原型是:public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)5.4.2 复制数组复制数组【例例】arraycopy复制数组复制数组charcopyFrom=d,e,c,a,f,f,e,i,n,a,t,e,d;charcopyTo=newchar7;System.arraycopy(copyFrom,2,copyTo,0,7);System.out.println(newString(copyTo);5.4.3 填充数组填充数组 njava.util.Arrays类中的类中的fill()方法方法可以用来填可以用来填充数组,即将数组部分或者全部元素赋值为充数组,即将数组部分或者全部元素赋值为某个元素。某个元素。n该类中提供了多种该类中提供了多种fill()方法的重载方法,以方法的重载方法,以int类型数组为例:类型数组为例:public static void fill(int a,int val)a:需要填充的数组。:需要填充的数组。val:用来填充数组的元素值。:用来填充数组的元素值。5.4.3 填充数组填充数组【例例5-4】使用使用fill()方法将数组中全部元素赋值方法将数组中全部元素赋值为为5,然后输出赋值结果。,然后输出赋值结果。intarray=newint5;Arrays.fill(array,5);System.out.println(数组中的元素);for(inti:array)System.out.print(i+);5.4.3 填充数组填充数组 fill(int a,int from,int to,int value)n该方法将指定的该方法将指定的int值值value分配给分配给int型型数组数组a指定范围中的每个元素。指定范围中的每个元素。n填充的范围从索引填充的范围从索引from(包括包括)一直到索引一直到索引to(不包括不包括)。n如果如果from=to,则填充范围为空。,则填充范围为空。5.4.3 填充数组填充数组【例例】使用使用fill(int a,int from,int to,int value)intarr=newint45,12,2,10;Arrays.fill(arr,1,2,8);for(inti=0;iarr.length;i+)System.out.println(第+i+个元素是:+arri);5.4.4 排序数组元素排序数组元素 n java.util.Arrays类中的类中的sort()方法可以用来方法可以用来按按升序排序升序排序数组,该方法提供了多种重载形数组,该方法提供了多种重载形式。式。n以以int类型数组作为参数的类型数组作为参数的sort()方法:方法:public static void sort(int a)a:需要排序的数组。:需要排序的数组。5.4.4 排序数组元素排序数组元素【例例5-5】使用使用sort()方法将降序排列的数组按方法将降序排列的数组按升序排列,然后输出赋值结果。升序排列,然后输出赋值结果。intarray=5,4,3,2,1;for(inti:array)System.out.print(i+);System.out.println();Arrays.sort(array);for(inti:array)System.out.print(i+);5.4.5 查找数组元素查找数组元素 njava.util.Arrays类中的类中的binarySearch()方法方法可以用来在数组中查找指定元素,该方法提可以用来在数组中查找指定元素,该方法提供了多种重载形式。供了多种重载形式。n以以int类型数组为例:类型数组为例:public static int binarySearch(int a,int key)查找成功,则返回搜索值的索引;查找成功,则返回搜索值的索引;否则返回否则返回-1。5.4.5 查找数组元素查找数组元素【例例5-6】使用使用sort()方法将降序排列的数组按方法将降序排列的数组按升序排列,然后输出赋值结果。升序排列,然后输出赋值结果。intarray=5,4,3,2,1;System.out.print(数组中的元素:);for(inti:array)System.out.print(i+);System.out.println();Arrays.sort(array);intindex=Arrays.binarySearch(array,0);System.out.println(元素0的索引值:+index);5.4.5 查找数组元素查找数组元素n在指定的范围之内,检索某一元素在指定的范围之内,检索某一元素binarySearch(Object a,int fromIndex,int toIndex,Object key)pa:要进行检索的数组。:要进行检索的数组。pfromIndex:指定范围的开始处索引。:指定范围的开始处索引。包含包含ptoIndex:指定范围的结束处索引。:指定范围的结束处索引。不包含不包含pkey:要搜索的元素。:要搜索的元素。5.4.5 查找数组元素查找数组元素n在指定的范围之内,检索某一元素在指定的范围之内,检索某一元素Stringstr=newStringab,cd,ef,yz;Arrays.sort(str);intindex=Arrays.binarySearch(str,0,2,cd);System.out.println(索引位置是:+index);数组的其它操作数组的其它操作n克隆克隆int array2=array1.clone();n判等判等Arrays.equals(array1,array2);n返回指定数组内容的字符串返回指定数组内容的字符串Arrays.toString();将数组内容放在将数组内容放在 中,用中,用“,”隔开。隔开。冒泡排序冒泡排序intarray=31,21,79,3,39;for(inti=0;iarray.length-1;i+)for(intj=0;jarrayj+1)inttemp=arrayj;arrayj=arrayj+1;arrayj+1=temp;System.out.println(Arrays.toString(array);知识点提炼知识点提炼n数组是具有相同数据类型的一组数据的集合。数组是具有相同数据类型的一组数据的集合。n可以使用可以使用“数组元素类型数组元素类型 数组名字数组名字;”语法来语法来创建一维数组,也可以在创建数组的同时对数组创建一维数组,也可以在创建数组的同时对数组进行初始化。进行初始化。n可以使用可以使用“数组元素类型数组元素类型 数组名字数组名字 ;”语法语法来创建二维数组,也可以在创建数组的同时对数来创建二维数组,也可以在创建数组的同时对数组进行初始化。组进行初始化。n可以使用可以使用for循环和循环和foreach循环来遍历数组。循环来遍历数组。知识点提炼知识点提炼n使用使用Arrays类中的类中的copyOf()方法可以用来复制方法可以用来复制数组。数组。n使用使用Arrays类中的类中的fill()方法可以用来填充数组方法可以用来填充数组n使用使用Arrays类中的类中的sort()方法可以用来排序数组方法可以用来排序数组元素。元素。n使用使用Arrays类中的类中的binarySearch()方法可以用方法可以用来查找数组元素。来查找数组元素。习题习题n1.编程求一个整数数组的最大值编程求一个整数数组的最大值、最小值、最小值、平均值,以及大于平均值的元素个数,并输平均值,以及大于平均值的元素个数,并输出结果。出结果。n2.使用一维数组实现降序排序。使用一维数组实现降序排序。n3.已知一个含有已知一个含有10个数值的整数序列,编程个数值的整数序列,编程将这个序列中所有奇数交换到前面,偶数交将这个序列中所有奇数交换到前面,偶数交换到后面,并输出处理后的结果。换到后面,并输出处理后的结果。