《Java程序设计案例教程》第04章 数组_第1页
《Java程序设计案例教程》第04章 数组_第2页
《Java程序设计案例教程》第04章 数组_第3页
《Java程序设计案例教程》第04章 数组_第4页
《Java程序设计案例教程》第04章 数组_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

程序设计第4章数组2目录

4.1

一维数组的定义与使用

4.2二维数组的定义与使用

4.3数组的常用方法

一维数组1、一维数组的声明2、一维数组的创建3、一维数组的初始化4、一维数组的引用44.1

一维数组的定义与使用4.1.1一维数组的定义1、一维数组的声明数据类型[]

数组名;或数据类型数组名[];说明:①数据类型定义了数组元素的数据类型,可以是基本类型或引用数据类型。②数组名定义数组变量的名字,应符合标识符的命名规则。③声明数组时,不能在方括号中指定数组的元素个数。例如int[]a;或inta[];是正确的数组声明方式。int[10]a是错误的数组声明方式。4.1

一维数组的定义与使用2.一维数组的创建数组可使用new关键字创建数组,并分配存储空间,格式如下:数组名=new数据类型[数组长度];a=newint[5];系统创建数组并分配存储空间数组中的每个元素会自动赋一个默认值整型为0,实型为0.0,布尔型为false,字符型为’\0’数组的声明与创建可以合二为一,格式为:数据类型[]数组名=new数据类型[数组长度];int[]a=newint[5];利用初始化方式声明数组变量,其格式如下:数据类型[]数组名={值1,值2,……};int[]a=newint[]{1,2,3,4,5};4.1.2一维数组的初始化1.一维数组的初始化(1)静态初始化静态初始化是指在创建数组的同时给数组赋值。如,char[]c={'a','b','c'};String[]s={"hello","world"};(2)动态初始化动态初始化是指在创建数组后,再给数组元素赋值。如,int[]a=newint[5];for(inti=0;i<a.length;i++)a[i]=i+1;String[]s=newString[2];s[0]="hello";s[1]="world";72.一维数组内存分配int[]a;//声明

a=newint[3];//创建

for(inti=0;i<a.length;i++){a[i]=i+1;//引用

}2.一维数组内存分配int[]a;在栈中生成一个名为a的引用变量,这时还未生成任何实际的数组,所以堆中没有任何相应的信息(见图(a))。a=newint[3];这时,new关键字生成了一个数组,这个数组是在堆中的,共有3个元素(见图(b))。引用变量的指针指向这个数组。直到这时,数组才是可以被访问的:for(inti=0;i<a.length;i++) a[i]=i+1;代码运行的结果是为数组赋值(见图(c))4.1.3一维数组的引用为数组分配了空间以后,就可以访问数组中的每一个元素了,数组引用的格式为:数组名[数组下标]int[]a=newint[3];数组下表从0到2,如果调用了a[3],程序会出现数组下标越界错误提示信息:java.lang.ArrayIndexOutOfBoundsException【例4.1】某小组有10个学生,进行了数学考试,求他们数学成绩的平均分、最高分和最低分。publicclassexample4_1{ publicstaticvoidmain(String[]args){ float[]a=newfloat[10]; floatsum,ave,max,min; inti; Scannersc=newScanner(System.in); System.out.println("请依次输入10位同学的数学成绩:"); //通过数组的length属性获得数组长度

for(i=0;i<a.length;i++){ a[i]=sc.nextFloat(); } sum=0; max=a[0]; min=a[0]; for(i=0;i<a.length;i++){ sum+=a[i]; if(a[i]>max) max=a[i]; if(a[i]<min) min=a[i]; } ave=sum/a.length; System.out.println("平均分:"+ave+",最高分:"+max+",最低分:"+min); }}【例4.2】将一个数组的内容按颠倒的次序重新存放。publicclassexample4_2{ publicstaticvoidmain(String[]args){ int[]a=newint[7]; inti,temp; Scannersc=newScanner(System.in); System.out.println("请输入7个整数:"); for(i=0;i<a.length;i++) a[i]=sc.nextInt(); System.out.println("交换前:"); for(i=0;i<a.length;i++) System.out.print(a[i]+"\t"); System.out.println(); for(i=0;i<a.length/2;i++){

temp=a[i]; a[i]=a[a.length-i-1]; a[a.length-i-1]=temp; } System.out.println("交换后:");//增强型for循环遍历数组,优点不需关心数组下标

for(intx:a) System.out.print(x+"\t");

System.out.println(); }}4.2多维数组的定义与使用4.2.1二维数组的定义1.二维数组的声明数据类型[][]

数组名;或数据类型数组名[][];说明:①二维数组最后一维的所有元素具有相同的数据类型。②二维数组的非最后一维的所有元素是数组类型。③声明二维数组时,不能在方括号中指定数组的元素个数。例如int[][]a;或inta[][];是正确的二维数组声明方式。int[3][10]a是错误的数组声明方式。2.二维数组的创建2.二维数组的创建①直接创建数组,为每一维分配存储空间数组可使用new关键字创建二维数组,并分配存储空间,格式如下:数组名=new数据类型[第1维长度][第2维长度];这时,系统会创建数组并为数组分配存储空间,如:a=newint[3][2];也可将数组的声明与创建合二为一,用一条语句表示,格式为:数据类型[][]数组名=new数据类型[第一维长度][第二维长度];或数据类型数组名[][]=new数据类型[第一维长度][第二维长度];例如,int[][]a=newint[3][2];2.二维数组的创建②从高维开始,分别为每一维分配存储空间使用方法①初始化的二维数组是第二维的每个数组都有相同的长度规则数组,还可以采用另外的方法实现不规则数组的初始化,格式如下:数组名=new数据类型[第1维的长度][];数组名[0]=new数据类型[第2维中第1行的长度];数组名[1]=new数据类型[第2维中第2行的长度];……2.二维数组的创建从高维开始进行数组初始化的例子:a=newint[3][]; //先为第一维分配空间,注意这时没有为第二维分配空间a[0]=newint[2]; //然后为第二维的每一个元素(数组)分配空间a[1]=newint[1];a[2]=newint[3];4.2.2二维数组的初始化1.二维数组的初始化为数组分配完空间后,需要对数组进行初始化,可以直接为数组元素赋值,如:

inta[][]=newint[2][2]; a[0][0]=1; a[0][1]=2; a[1][0]=3; a[1][1]=4;也可以不用new运算符,而是利用初始化值,完成数组的创建与初始化,如:

int[][]a={{1,2,3},{4,5,6}};//声明、创建及初始化2行3列数组

int[][]b={{1},{2,3},{4,5,6}};//声明、创建及初始化不规则数组17创建数组(一)直接为每一维分配空间int[][]a;//1.二维数组的声明

a=newint[3][2];//2.二维数组的创建(三行二列)

a[0][0]=1;//3.二维数组的引用

a[0][1]=2;a[1][0]=3;a[1][1]=4;a[2][0]=5;a[2][1]=6;18创建数组(二)从高维开始,分别为每一维分配空间

int[][]a;//1.二维数组的声明a=newint[3][];//2.先为第一维分配空间a[0]=newint[2];//然后为第二维的每一个元素分配空间a[1]=newint[1];a[2]=newint[3];a[0][0]=1;//3.二维数组的引用a[0][1]=2;a[1][0]=3;a[2][1]=4;a[2][2]=5;a[2][3]=6;192.二维数组内存分配int[][]a;//声明

a=newint[3][];//高维开始

a[0]=newint[1];//每一维

a[1]=newint[2];a[2]=newint[3];a[0][0]=1;//访问

a[1][1]=2;a[2][2]=3;4.2.3二维数组的引用二维数组引用格式为:数组名[下标1][下标2];其中,下标1、下标2分别是第1维和第2维的数组下标,并且下标为整型常量或表达式,且从0开始。【例4.3】通过键盘给一个3行4列的二维数组输入整型数值,并按表格形式输出此数组的所有元素。publicclassexample4_3{ publicstaticvoidmain(String[]args){ int[][]a=newint[3][4]; Scannersc=newScanner(System.in); inti,j; System.out.println("请输入12个整数:"); for(i=0;i<a.length;i++) for(j=0;j<a[i].length;j++) a[i][j]=sc.nextInt(); System.out.println("表格形式输出数组:"); for(i=0;i<a.length;i++){ for(j=0;j<a[i].length;j++) System.out.print(a[i][j]+"\t"); System.out.println(); } }}

【例4.5】二维数组:定义一个三角数组,存放乘法表的结果。publicclassexample4_5{ publicstaticvoidmain(String[]args){ String[][]triangleArray=newString[9][]; //声明并初始化三角形数组

for(inti=0;i<triangleArray.length;i++){ triangleArray[i]=newString[i+1]; } //为该三角形数组赋乘法表的结果

for(inti=0;i<triangleArray.length;i++){ for(intj=0;j<triangleArray[i].length;j++){ triangleArray[i][j]=(i+1)+"*"+(j+1)+"="+(i+1) *(j+1); } } //输出该三角形数组

for(inti=0;i<triangleArray.length;i++){ for(intj=0;j<triangleArray[i].length;j++){ System.out.print("\t"+triangleArray[i][j]); } System.out.println(); } }}4.3数组的常用方法1.System类中的arraycopy方法系统类System提供了一个复制(克隆)数组的方法,其格式为:publicstaticvoidarraycopy(Objectsrc,intsrcPos,Objectdest,intdestPos,intlength)其中,src为源数组名,src_pos为源数组的起始位置,dst为目标数组名,dst_pos为目标数组的起始位置,length为复制的长度,例如:

inta[]={1,2,3,4,5,6,7}; intb[]=newint[6];//结果是b的内容为002340 System.arraycopy(a,1,b,2,3); 2.java.util.Arrays类中的有关方法①数组排序sort()排序方法的格式是:publicstaticvoidsort(Object[]a)其功能是根据元素的自然顺序,对指定对象数组按升序进行排序。例如:

inta[]={7,5,2,6,3}; Arrays.sort(a); //结果是a的内容为23567sort方法存在重载,其格式为:publicstaticvoidsort(Object[]arrayname,intfromindex,inttoindex)其中,fromindex和toindex是进行排序的起始位置和结束

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论