Java语言程序设计_05数组的定义与使用_第1页
Java语言程序设计_05数组的定义与使用_第2页
Java语言程序设计_05数组的定义与使用_第3页
Java语言程序设计_05数组的定义与使用_第4页
Java语言程序设计_05数组的定义与使用_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

1、第第5 5章章 在实际应用中,经常需要处理具有相同性质的一批数据。为此,在Java中还引入了数组,即用一个变量表示一组相同性质的数据。5.1 一维数组一维数组5.2 多维数组多维数组5.3 数组的基本操作数组的基本操作5.4 数组应用举例数组应用举例5.5 数组参数数组参数5.6 字符串字符串5.1 一维数组一维数组 数组是用一个变量名表示一组数据,每个数据称为数组元素,每个元素通过下标来区分。如果用一个下标能确定数组中的不同元素,这种数组称为一维数组。1 1 一维数组的声明一维数组的声明 一维数组声明的格式为:类型标识符类型标识符 数组名数组名 或或类型标识符类型标识符 数组名数组名 类型标

2、识符指定每个元素的数据类型。例如,要表示学生的成绩(整数),可以声明数组score: int score ; 该声明表示数组的名字为score,每个元素为整数。要表示学生的体重(浮点数),可以声明元素的数据类型为float的数组weight,其声明如下: float weight; 2 一维数组的初始化 要让系统为数组分配存储空间,必须指出数组元素的个数,该工作在数组初始化时进行。l用用newnew初始化数组初始化数组n先声明数组再初始化先声明数组再初始化 数组名= new 类型标识符元素个数 元素个数通过整型常量来表示。要表示10个学生的成绩(整数),可以先声明元素的数据类型为int的数组s

3、core,再用new运算符初始化该数组。 int score;int score; score=new int10;score=new int10; 数组中各元素通过下标来区分,下标的最小值为0,最大值比元素个数少1。score的 10个元素分别为score0,score1,score2,score3,score9。系统为该数组的10个元素分配存储空间,形式如下表所示:score0score1score2score3score4score5score6score7score8score9例:要计算100个学生的平均成绩,可以使用以下的程序段:float sum;int i;int score

4、;score = new int100; /* 输入数组各元素的值 */sum=0;for ( i=0; i100; i+) sum=sum+scorei;sum=sum/100;n声明的同时进行初始化声明的同时进行初始化 可以用1条语句声明并初始化数组,即将上面的2条语句合并为一条语句。其格式如下:类型标识符类型标识符 数组名数组名 = new 类型标识符类型标识符元素个数元素个数或或类型标识符类型标识符 数组名数组名= new 类型标识符类型标识符元素个数元素个数 例如,要表示10个学生的学号,可以按以下方式声明并初始化数组no: int no = new int10; l赋初值初始化数组

5、 可以在声明数组的同时,给数组元素赋初值。所赋初值的个数决定数组元素的数目。其格式如下: 类型标识符 数组名 = 初值表 初值表是用逗号隔开的初始值。 例如: int score =65,34,78,81,56,92,56,87, 90, 77;score0score1score2score3score4score5score6score7score8score9653478815692568790775.2 5.2 多维数组多维数组1 1 二维数组的声明二维数组的声明 二维数组的声明方式与一维数组类似,只是要给出两对方括号。二维数组声明形式如下:类型标识符类型标识符 数组名数组名 或或类型标

6、识符类型标识符 数组名数组名 例如,要表示每个数据为整型数的行列式,可以声明 如下二维数组: int a ;2 二维数组的初始化 l用用newnew初始化二维数组初始化二维数组n先声明数组再初始化先声明数组再初始化 数组名数组名= new 类型标识符类型标识符行数行数列数列数例如: int a;int a; a=new int34; a=new int34;n声明的同时进行初始化声明的同时进行初始化 类型标识符类型标识符 数组名数组名 = new 类型标识符类型标识符行数行数列数列数或或类型标识符类型标识符 数组名数组名=new 类型标识符类型标识符行数行数列数列数 int a=new int

7、34; int a=new int34; 数组中各元素通过两个下标来区分,每个下标的最小值为0,最大值分别比行数或列数少1。a的12个元素分别为a00, a01, a02, a03, a10, a11,a23。系统为该数组a的12个元素分配存储空间,形式如表所示:a0 0a0 1a0 2a03a1 0a1 1a1 2a1 3a2 0a2 1a2 2a2 3l赋初值初始化数组赋初值初始化数组其格式如下:类型标识符 数组名 = 初值表,初值表,初值表 int grade = 65,34, 78, 81, 56, 92, 56, 87,90, 92, 69, 75;数组grade共有12个元素,元素

8、grade 00,grade 01,grade 02,grade 10,grade 32的初始值分别为65,34,78,75,如表所示:grade 00 65grade 01 34grade 02 78grade 10 81grade 11 56grade 12 92grade 20 56grade 21 87grade 22 90grade 30 92grade 31 69grade 32 755.3 数组的基本操作数组的基本操作 l数组的引用 对数组的应用通常是对其元素的引用。 int age=new int3; age0=25; age2=2+age0 ;l数组的复制 int a=new

9、 int6; int b=1,2,3,4,5,6; for(int i=0;i6;i+) ai=bi; 或 a=b;例-数组复制int c,d, e,i, j;c=new int33;d=new int33;e=new int33;for(i=0;i3; i+) for (j=0; j3; j+) dij=i+j; cij=dij; e=d;l数组的输出数组的输出 数组的输出通常是逐个元素结合循环语句实现的。 int a=new int6; for(int i=0;i6;i+) ai=i; System.out.println(ai); 例-一维数组的复制class ArrayC public

10、 static void main(String args) int a,b, i, j; a=new int3; b=new int5; System.out.println(a.length=+a.length); for ( i=0; ia.length; i+) ai=i; System.out.print(ai+ ); System.out.println(); System.out.println(Before array assignment); System.out.println (b.length=+b.length); for (j=0; jb.length; j+) b

11、j=j*10; System.out.print(bj+ ); System.out.println(); b=a; System.out.println(After array assignment); System.out.println (b.length=+b.length); for (j=0; jb.length; j+) System.out.print(bj+ ); System.out.println(); 程序运行结果如下: a.length=30 1 2Before array assignmentb.length=50 10 20 30 40After array as

12、signmentb.length=30 1 2例-二维数组的复制class ArrayC2 public static void main(String args) int c,d,i, j; c=new int22; d=new int33; System.out.println( Array d); for(i=0;id.length; i+) for (j=0; jdi.length; j+) dij=i+j; System.out.print(dij+ ); System.out.println(); c=d;System.out.println( Array c);for(i=0;i

13、c.length; i+) for (j=0; jci.length; j+) System.out.print(cij+ ); System.out.println(); 程序运行结果如下: Array d0 1 21 2 32 3 4Array c0 1 21 2 32 3 45.4 数组应用举例数组应用举例 例例 排序排序 排序是将一组数按照递增或递减的顺序排列。排序的方法很多,其中最基本的是选择法。此处介绍选择法排序,其基本思想如下:对于给定的n个数,从中选出最小(大)的数,与第1个数交换位置,便将最小(大)的数置于第1个位置。对于除第1个数外的剩下的n-1个数,重复步骤1,将次小(大

14、)的数置于第2个位置。对于剩下的n-2,n-3,n-n+2个数用同样的方法,分别将第3个最小(大)数置于第3位置,第4个最小(大)数置于第4位置,第n-1个最小(大)数置于第n-1位置。 假定有7个数,7,4,0,6,2,5,1,根据该思想,对其按照递增顺序排列,需要进行6轮选择和交换过程:第1轮:7个数中,最小数是0,与第1个数7交换位置,结果为:0 4 7 6 2 5 1第2轮:剩下的6个数中,最小数是1,与第2个数4交换位置,结果为:0 1 7 6 2 5 4第3轮:剩下的5个数中,最小数是2,与第3个数7交换位置,结果为:0 1 2 6 7 5 4第4轮:剩下的4个数中,最小数是4,与

15、第4个数6交换位置,结果为:0 1 2 4 7 5 6第5轮:剩下的3个数中,最小数是5,与第5个数7交换位置,结果为:0 1 2 4 5 7 6第6轮:剩下的2个数中,最小数是6,与第6个数7交换位置,结果为:0 1 2 4 5 6 7 可见,对于n个待排序的数,要进行n-1轮的选择和交换过程。其中第i轮的选择和交换过程中,要进行n-i次的比较,方能选择出该轮中最小(大)的数。 import java.io.*; class ArraySort public static void main(String args) throws IOException BufferedReader key

16、in =new BufferedReader(new InputStreamReader(System.in); int a,i, j, k, temp; String c; System.out.println(Input the number of array elements!);例-排序例 排序(续)c=keyin.readLine();temp=Integer.parseInt(c);a = new inttemp;System.out.println(Input + temp + numbers. One per line!);for ( i=0; ia.length; i+) c

17、=keyin.readLine(); ai=Integer.parseInt(c);System.out.println(After sorting!);for ( i=0; ia.length-1; i+)k = i;for( j = i + 1 ; j a.length; j+) if (aj ak ) k = j;temp = ai; ai= ak; ak = temp;for ( i=0; ia.length; i+) System.out.println(ai);例-矩阵运算 数学中的矩阵在Java中用二维数组实现,本例中要进行矩阵的加、乘运算。class ArrayC3 publi

18、c static void main(String args) int c=1,2,3,4,5,6,7,8,9; int d=2,2,2,1,1,1,3,3,3; int i, j, k; int e=new int33; System.out.println( Array c); for(i=0;ic.length; i+) for (j=0; jci.length; j+) System.out.print(cij+ ); System.out.println(); System.out.println( Array d);for(i=0;id.length; i+) for (j=0;

19、jdi.length; j+) System.out.print(dij+ ); System.out.println(); System.out.println( Array c+d);for(i=0;ie.length; i+) for (j=0; jei.length; j+) eij=cij+dij; System.out.print(eij+ ); System.out.println(); System.out.println( Array c*d);for(i=0;i3; i+) for (j=0; j3; j+) eij=0; for (k=0;k3; k+) eij=eij+

20、cik*dkj; System.out.print(eij+ ); System.out.println(); 程序运行结果如下:Array c1 2 34 5 67 8 9Array d2 2 21 1 13 3 3Array c+d3 4 55 6 710 11 12Array c*d12 12 1221 21 2130 30 305.5 5.5 数组参数数组参数 在java的过程中,允许参数是数组。在使用数组参数时,应该注意以下事项:u在形式参数表中,数组名后的括号不能省略,括号个数和数组的维数相等。不需给出数组元素的个数。u在实际参数表中,数组名后不需括号。u数组名做实际参数时,传递的

21、是地址,而不是值,即形式参数和实际参数具有相同的存储单元。例-计算数组元素平均值class ArrayC4 public static void main(String args) int c=1,2,3,4,5,6,7,8,9; int j;System.out.println( Array c); for (j=0; jc.length; j+) System.out.print(cj+ ); System.out.println();System.out.println( Array average);System.out.println( arrayAverage(c);static

22、float arrayAverage(int d) float average=0 ; for(int i=0;id.length; i+) average=average+di; average=average/d.length; return average; 程序运行结果如下:Array c1 2 3 4 5 6 7 8 9Array average5.0例-展示数组参数传递地址的特性class ArrayC6 public static void main(String args) int c=1,2,3,4,5,6,7,8,9,10; int i, j; System.out.pri

23、ntln( Array c before calling arrayMultiply); for (i=0; ic.length; i+) for(j=0; jci.length; j+) System.out.print(cij+ ); System.out.println(); arrayMultiply(c); System.out.println( Array c after calling arrayMultiply); for (i=0; ic.length; i+) for(j=0; jci.length; j+) System.out.print(cij+ ); System.

24、out.println(); static void arrayMultiply(int d) int k,l; for (k=0; kd.length; k+) for(l=0; ldk.length; l+) dkl=2*dkl; System.out.println( In arrayMultiply); for (k=0; kd.length; k+) for(l=0; ldk.length; l+) System.out.print(dkl+ ); System.out.println(); 程序的运行结果如下:Array c before calling arrayMultiply

25、1 2 3 4 56 7 8 9 10In arrayMultiply2 4 6 8 1012 14 16 18 20Array c after calling arrayMultiply2 4 6 8 1012 14 16 18 20例-展示数组元素参数传递值的特性class ArrayC7 public static void main(String args) int c=1,10,100,1000; int j; System.out.println(Array c before calling elementMultiply); for (j=0; jc.length; j+) Sy

26、stem.out.print(cj+ ); System.out.println(); elementMultiply(c2); System.out.println( Array c after calling elementMultiply); for (j=0; jc.length; j+) System.out.print(cj+ ); System.out.println(); static void elementMultiply(int d) d=2*d;System.out.println(d=+d); 该程序的运行结果如下:Array c before calling ele

27、mentMultiply1 10 100 1000d=200Array c after calling elementMultiply1 10 100 10005.6 字符串字符串 l字符数组与字符串 字符数组指数组的元素是字符类型的数据。要表示字符串“China”,可以使用如下的字符数组: char country=C,h,i,n,a; 要表示长度为50的字符串,虽然可以使用如下的字符数组: char title= new char50;l字符串 为了使用方便Java提供了String类型。 n字符串变量的声明和初始化:字符串变量的声明和初始化: String 变量名; 变量名=new St

28、ring(); 或String 字符串变量 = new String(); 例如: String s=new String();n字符串赋值 可以为字符串变量赋一个字符串常量,也可以将一个字符串变量或表达式的值赋给字符串变量。 s=“Chinese people”;s2=s1;s3=a lot of+s2; 结果s2的值为“Chinese people”,s3的值为“a lot of Chinese people”。其中运算符“+”的作用是将前后的两个字符串连接起来。 n字符串的输出字符串可以通过println()或print()语句输出。例如,以下的语句序列为字符串变量s赋值并输出其值:s=

29、All the world;System.out.println(s);输出结果为:All the world例例-字符串应用字符串应用public class StringUse public static void main(String args) String s1, s2; s1=new String(Students should ); s2=new String(); s2=study hard.; System.out.print(s1); System.out.println(s2); s2=learn english, too; System.out.print(s1); System.out.println(s2); s2=s

温馨提示

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

评论

0/150

提交评论