您好,欢迎访问三七文档
第五章数组5.1概念数组是一组同类型的变量或对象的集合数组的类型可以是基本类型,或类和接口数组中每个元素的类型相同引用数组元素通过数组名[下标]数组下标(数组的索引)从0开始数组是一种特殊的对象(Object)数组是Java中的对象,它储存多个同类型变量。数组能够保存原始类型或对象引用,但是自己总是堆中的对象,即使数组被声明为用以保存原始类型元素。换句话说,并没有原始数组,但你可以建立这样的原始数组。定义类型(声明)创建数组(分配内存空间):new初始化数组释放(Java虚拟机完成)数组引用一维数组、多维数组5.1.1一维数组1.数组的声明一维数组的元素只有一个下标变量例:A[1],c[3]一维数组的声明方法1:类型数组名[];(Notgood)Stringargs[];inta[];doubleamount[];charc[];方法2:类型[]数组名;(Recmmenod)String[]args;int[]a;double[]amount;char[]c;注意类型是数组中元素的数据类型(基本和构造类型)数组名是一个标识符数组声明后不能被访问,因未为数组元素分配内存空间eg.int[]a;System.out.print(a[0]);?????2.数组的创建及初始化用new来创建数组为数组元素分配内存空间,并对数组元素进行初始化格式:数组名=new类型[数组长度]例:a=newint[3];声明和创建的联用:int[]a=newint[3];3.数组的初始化◇静态初始化int[]intArray={1,2,3,4};String[]stringArray={abc,How,you};◇动态初始化1)简单类型的数组int[]intArray;intArray=newint[5];默认赋初值整型初值为0int[]i=newint[3];byte[]k=newbyte[4];shortj=newshort[4];长整型初值为0Llong[]g=newlong[3];单精度浮点型初值为0.0ffloat[]f=newfloat[3];双精度浮点型初值为0.0ddouble[]d=newdouble[3];布尔型初值为falseboolean[]b=newboolean[3];字符型初值为\u0000(不可见)char[]c=newchar[3];练习:1.创建各种基本数据类型数组,观察系统赋给数组元素的默认值案例:classTest{publicstaticvoidmain(Stringargs[]){int[]i=newint[3];float[]f=newfloat[3];boolean[]b=newboolean[3];char[]c=newchar[3];for(intj=0;ji.length;j++)System.out.println(i[j]);for(intj=0;jf.length;j++)System.out.println(f[j]);for(intj=0;jb.length;j++)System.out.println(b[j]);for(intj=0;jc.length;j++)System.out.println(c[j]);}}C:\javacTest.javaC:\javaTest0000.0f0.0f0.0fFalsefalsefalse不可见完整形式:int[]intArray=newint[]{1,2,3,4};2)复合类型的数组String[]stringArray;stringArray=newString[3];//为数组中每个元素开辟引用空间(32位)stringArray[0]=newString(How);//为第一个数组元素开辟空间stringArray[1]=newString(are);//为第二个数组元素开辟空间stringArray[2]=newString(you);//为第三个数组元素开辟空间练习:1.创建String数据类型的数组,观察系统赋给String数组元素的默认值案例:publicclassTest{publicstaticvoidmain(String[]args){String[]str=newString[3];for(intj=0;jstr.length;j++)System.out.println(str[j]);}}nullnullnull默认赋初值字符串初值为nullString[]str=newString[3];4.数组的使用数组名[下标]数组下标的数据类型只能是byte,short,int,而不能是long型数据;案例:publicclassArrayDemo{publicstaticvoidmain(String[]args){int[]arr=newint[10];System.out.print(Array:);for(inti=0;iarr.length;i++){System.out.print(arr[i]+);arr[i]=i;}System.out.print(\n\nArray:);for(inti=0;iarr.length;i++)System.out.print(arr[i]+);System.out.println();}}Array:0000000000Array:0123456789数组length属性的使用Java中,对于每个数组都有一个属性length来指明其长度。如:list.length就指明了数组list的长度使用length属性表示数组长度会给程序带来很大的灵活性,使得处理数组的代码与数组的长度没有关系。案例:importjava.util.Scanner;publicclassavscore{publicstaticvoidmain(String[]args){Scannerscan=newScanner(System.in);System.out.print(总人数:);intlen=scan.nextInt();float[]score=newfloat[len];for(inti=0;iscore.length;i++){System.out.printf(输入学生%d的分数:,i+1);floatinput=scan.nextFloat();score[i]=input;}System.out.print(\n分数:);floattotal=0;for(intj=0;jscore.length;j++){total=total+score[j];System.out.print(score[j]+);}System.out.printf(\n平均:%.2f,total/score.length);}}C:\ws\ch5javaavscore总人数:3输入学生1的分数:87.9输入学生2的分数:58.3输入学生3的分数:36.4分数:87.958.336.4平均:60.87编程练习:1.数组的反序输出:随机产生10个100以内的整数,分别将其按正序和反序输出。知识点:a.数组的创建与使用;b.length属性的使用;产生一个[x1,x2]内的随机整数xx=(int)(Math.random()*(x2-x1+1)+x1)Math.random()产生一个[0,1)区间内的实数。5.数组的赋值1)数组的整体赋值2)用java.lang.System类的方法进行数组制复制1)数组整体赋值classTest{publicstaticvoidmain(Stringargs[]){inta[]={2,4,6,8};intb[];int[]c={1,3,5,7};b=a;c=a;//给对象a指定b,c另外两个引用名称,也就是a,b,c都参考至同一个对象:{2,4,6,8}for(intj=0;ja.length;j++)System.out.print(a[j]+““);System.out.println();for(intj=0;jb.length;j++)System.out.print(b[j]+““);System.out.println();for(intj=0;jc.length;j++)System.out.print(c[j]+””);c[2]=100;for(intj=0;ja.length;j++)System.out.print(a[j]+““);System.out.println();for(intj=0;jb.length;j++)System.out.print(b[j]+““);System.out.println();for(intj=0;jc.length;j++)System.out.print(c[j]+””);}}246824682468241008241008241008思考:1.将上述程序中int[]c={1,3,5,7};改为int[]c={1,3,5,7,10};结果会如何?2.将上述程序中inta[]={2,4,6,8};改为inta[]={2,4,6,8,10};结果又会如何?246824682468246810246810246810数组的复用(reuse)publicclassTest{publicstaticvoidmain(String[]args){int[]array={32,87,3,589,12,1076,2000};for(inti=0;iarray.length;i++)System.out.print(array[i]+);array=newint[4];//array=newint[]{0,0,0,0}for(inti=0;iarray.length;i++)array[i]=i+1;System.out.println();for(inti=0;iarray.length;i++)System.out.print(array[i]+);}}32,87,3,589,12,1076,200012342)数组复制方法1:在Java中,数组是一个对象,而使用=指定时是将对象指定给数组名称来参考,而不是数组复制。publicclassArrayCopy{publicstaticvoidmain(String[]args){int[]arr1={1,2,3,4,5};int[]arr2=newint[5];//数组的复制for(inti=0;iarr1.length;i++)arr2[i]=arr1[i];for(inti=0;iarr2.length;i++)System.out.print(arr2[i]+);System.out.println();}方法2:java.lang.System类的方法arraycopypublicstaticvoidarraycopy(Objectsrc,intsrcPos,Objectdest,intdestPos,intlength)从指定源数组中复制一个数组,复制从源数组指定的位置开始的length个元素,到目标数组指定位置开始的length长度的单元。案例:classTest{publicstaticvoidmain(Stringargs[]){int[]a={2,4,6,8};int[]b;int[]c={1,3,5,7,9};b=a;System.arraycopy(a,1,c,2,3);System.out.print(“数组a:”);for(inti=0;ia.length;i++)System.out.print(a[i]+“”);System.out.println();System.out.print(“数组b:”);for(inti=0;ib.length;i++)System.out.print(b[i]+“”);System.out.print
本文标题:第五章数组
链接地址:https://www.777doc.com/doc-2189404 .html