java面向对象程序设计_第1页
java面向对象程序设计_第2页
java面向对象程序设计_第3页
java面向对象程序设计_第4页
java面向对象程序设计_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

第5章数组Java教材编写组教学目标理解数组的概念了解使用数组的步骤:声明数组引用变量、创建数组、初始化数组和处理数组掌握一维数组和二维数组的应用熟悉查找和数组排序的方法理解字符数组、对象数组和ArrayList类的应用声明数组

数组要经过声明及初始化以后,才能被使用。数组的声明方式有下面两种:1.数据类型数组名[];2.数据类型[]数组名;其中类型(type)可以为Java中任意的数据类型,包括简单类型和组合类型,数组名arrayName为一个合法的标识符,[]指明该变量是一个数组类型变量。例如:intintArray[];声明了一个整型数组,数组中的每个元素为整型数据。初始化数组数组中元素的个数称为数组大小或数组长度。与C、C++不同,Java在数组的定义中并不为数组元素分配内存,因此[]中不用指出数组中元素的个数,即数组长度,而且对于如上定义的一个数组是不能访问它的任何元素的。数组必须经过初始化后,才能应用数组的元素。静态初始化数组的初始化分为静态初始化和动态初始化两种.静态初始化:在定义数组的同时对数组元素进行初始化,例如:

intintArray[]={1,2,3,4};//定义了一个含有4个元素的int型数组。动态初始化

动态初始化:使用运算符new为数组分配空间,对于简单类型的数组,其格式如下:

typearrayName[]=newtype[arraySize];type[]arrayName=newtype[arraySize];对于复合类型的数组,需要经过两步空间分配。首先:typearrayName[]=newtype[arraySize];

然后:arrayName[0]=newtype(paramList);…arrayName[arraySize-1]=newtype(paramList);数组初始化实例例如:StringstringArrar[];//定义一个String类型的数组stringArray=newString[3];//给数组stringArra分配3个应用空间,初始化每个引用值为nullstringArray[0]=newString(“how”);stringArray[1]=newString(“are”);stringArray[2]=newString(“you”);数组元素引用当定义了一个数组,并用运算符new为它分配了内存空间后,就可以引用数组中的每一个元素了。元素的引用方式为:arrayName[index]index为数组下标,可以是整型常数或表达式,如:arrayName[1],arrayName[i],arrayName[6*i]等。下标是0序的,即从0开始,一直到数组长度减1。通常,Java会自动进行数组下标越界检查,如果下标超出该范围,会产生ArrayIndexOutOfBoundsException异常,即数组下标越界异常。因此,编写程序时最好使用数组的length属性获得数组大小,从而使下标不超出其取值范围。

数组的赋值声明数组的同时初始化数组格式如下:数据类型[]数组名={第一个元素,第二个元素,第三个元素,…};先声明并创建后,再赋值例如,int[]array1=newint[10];array1[0]=6;array1[1]=7;array1[2]=8;数组的应用1、数组中元素的查找:顺序查找顺序查找通常用于一组无序的数据中查找。将待查找的数据与数组中的每一个元素依次进行比较,直到查找的数据与数组中的一个元素匹配或全部查找完为止。如果找到了一个匹配元素,则返回数组中该元素的位置。若没有找到。则返回-1。例5.1编写程序,读入10个整数,求出它们中的最小数。//文件名Ex5_1.javaimportjava.util;publicclassEx5_1{publicstaticvoidmain(Stringargs[]){intnum[]=newint[10];

System.out.println("请输入10个整数");

for(inti=0;i<num.length;i++)

num[i]=DefInput.readInt();intmin=num[0];for(inti=1;i<num.length;i++)if(min>num[i])min=num[i];System.out.print("最小数是:"+min);

}}例5.1程序分析:

程序中声明并创建了10个元素的数组num,用for循环输入了10个整数。循环体中使用了第2章的自定义类DefInput.class的readInt()方法输入整数。注意:每输入一个数,要按回车,再输入下一个数。变量min,用于存放最小值,先将num[0]的值赋给min,然后min分别与num[i](i=1~9的9个数)比较,若min大于num[i],则将num[i]的值赋给min,否则min不变。比较操作完成后,min中存放的数值即为数组num中的最小值。数组应用2、冒泡法排序用冒泡法对数列(74932)从小到大排序。分析:冒泡法排序的思路是将相邻两个数两两比较,把较小数调到前面。如有5个数7、4、9、3、2,要求按从小到大排序,比较步骤如下:冒泡法排序第1轮:

第一次7和4对调,第二次因7<9不用对调,第三次将9和3对调,┅,得到4、7、3、2、9的顺序。一轮比较后,最大数已在最后(沉底),小数向上移动(浮起)。如下所示。第1次:74932第2次:47932第3次:47932第4次:47392结果:47329第2轮:

将前4个数4,7,3,2两两比较,次大数沉底。如下所示。第1次:47329第2次:47329第3次:43729结果:43279第3轮,得第3个大数。第4轮,得第4个大数。剩下的一个为最小数。可见这5个整数共需要4轮比较,在每一轮中,每个数需与它的后一个数比较。n个整数需要n-1轮比较。例5.2用冒泡法对数列(74932)从小到大排序。publicclassEx5_2{publicstaticvoidmain(String[]args){int[]a={7,4,9,3,2};inti,j,t;System.out.print("排序前数组元素是:");for(i=0;i<5;i++)System.out.print(a[i]+"");System.out.println();for(i=0;i<4;i++)for(j=0;j<4-i;j++)if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}System.out.print("排序后数组元素是:");for(i=0;i<5;i++)System.out.print(a[i]+"");}}字符数组字符数组中的每个元素都是字符类型的数据,它的创建方法与一般的数组相似。字符数组的创建如:charstr1[]=newchar[10];该语句声明并创建了字符数组str1,该数组中可以存储10个字符。字符数组可以初始化,例如,

charstr2={'a','b','c','d','e'};其中,str2是一个字符数组,共有5个元素,str2[0]为'a',str2[1]为'b‘,str2[2]为'c‘,str2[3]为'd',str2[4]为'e'。字符数组的元素可以被赋值。例如,s2[1]='d';下面通过for循环语句给一个字符数组赋值。charstr[]=newchar[100];for(inti=0;i<26;i++)str[i]='A'+i;经过上述循环后,数组str中将存储26个大写字母。

字符串与字符数组字符串不是字符数组,但是可以转换为字符数组,反之亦然。字符串和字符数组之间的转换有以下几种形式:使用toCharArray方法将字符串转换为字符数组。例如,下面语句将字符串“word”中的字符转换为数组charArray中的数组元素。char[]charArray="word".toCharArray();则charArray[0]是'w',charArray[1]是'o',charArray[2]是'r',charArray[3]是'd'。使用String(char[])构造方法或valueOf(char[])方法,将字符数组转换为字符串。例如,下面语句使用String构造方法从数组构造了一个字符串。Stringstr=newString(newchar[]{‘w’,’o’,’r’,’d’});下面语句使用valueOf方法从数组构造了一个字符串。Stringstr=String.valueOf(newchar[]{‘w’,’o’,’r’,’d’});例5.3从键盘输入一个字符串,请判断该字符串是否是回文。

回文是指该字符串顺序和逆序是一样的,例如mom是回文。本程序提示用户从键盘输入一个字符串,用while循环来比较字符并且确定字符串是否是回文。使用循环检查字符串的第一个字符是否和最后一个字符一样。如果是,检查第二个字符是否和倒数第二个字符一样。这个过程持续到检查出不相同的字符或字符串中的所有字符都已检查完,若字符串中含有奇数个字符,则不检查中间的字符。例5.3程序代码importjavax.swing.JOptionPane;publicclassEx5_3{publicstaticvoidmain(String[]args){inti=0,flag=0;Strings=JOptionPane.showInputDialog(null,"输入一字符串:","例5.6输入",JOptionPane.QUESTION_MESSAGE);Stringoutput="";if(comp(s))output+=s+"是回文";elseoutput+=s+"不是回文";JOptionPane.showMessageDialog(null,output,"例5.6输出",JOptionPane.INFORMATION_MESSAGE);System.exit(0);}publicstaticbooleancomp(Strings){inti=0;char[]charArray=s.toCharArray();while(i<s.length()/2){if(charArray[i]!=charArray[s.length()-1-i])returnfalse;i++;}returntrue;}}二维数组

声明二维数组的格式有如下两种:数据类型[][]数组名;数据类型数组名[][];创建二维数组的方法,使用关键字new。格式如下:数组名=new数据类型[行长度][列长度];可以使用一个简化的方式来声明、创建和初始化二维数组。如,int[][]array={{1,2,3},{4,5,6},{7,8,9},{11,12,13}};例5.4定义一个整型的二维数组,分行输出每行数组元素并求所有元素之和。publicclassEx5_4{publicstaticvoidmain(String[]args){inti,j,sum=0;intb[][]={{1,2,3},{4,5,6,7,8},{9,10,11,12,13,14,15}};for(i=0;i<b.length;i++){System.out.print("第"+(i+1)+"行的所有元素:");for(j=0;j<b[i].length;j++){sum+=b[i][j];System.out.print(b[i][j]+"\t");}System.out.println();System.out.println("二维数组所有的元素的和sum="+sum);}}例5.4程序分析

定义二维数组b,各个元素分别赋值;用嵌套的双层循环实现程序功能。外层for语句控制数组b的各行,行下标从0开始到b.length-1,内层for语句控制数组b的第i行的各列,列下标从0开始到b[i].length-1。

ArrayList类

Java中数组的大小在创建数组时给出,一旦给出数组大小,就不可能再改变。有时程序中要用到大小不确定的数组,这时可以用两种方法解决:一是定义尽可能大的数组;二是使用java.util包中的ArrayList类,这个类实现了与数组类似的数据结构,还可以根据程序的需要自动改变大小。它的使用与数组有一些区别。下面的语句创建了一个ArrayList对象mlist,ArrayListmlist=newArrayList();ArrayList对象mlist中可以存放基本数据类型、对象等元素。对象数组Java中声明的数组的数据类型也可以是对象。数组类型为对象的数组称为对象数组。对象数组先作为数组定义,用new为该数组分配内存,然后用new为每一个作为数组元素的对象分配内存。对象数组和基本数据类型的数组一样,可以作为方法的参数或方法的返回值。在main()方法中,就是一个String类的对象数组作为方法参数。注意:对象数组声明后,不能立刻存放数据。这是因为对象数组的声明只会产生对象的引用,并没有产生对象的实例。可以按以下方法使用:MyObjectobj[]=newMyObject[2];obj[0]=newMyObject();obj[0].data=5;实例:选择排序

假定对一组有序数进行升序排序。选择排序就是每次寻找这一序列中最大的数,并将其与序列的最后面数交换位置,然后寻找未排序序列中的最大数与最后面数交换位置,依次类推直到全部排序完成。选择排序

分析下面的数列:2843715选择8(最大的数字)并与5(数列中最后一个数字)交换,新的数列是:2543718数字8现在位于正确的位置,因此不再需要考虑它(下划线表示一个数字已经被排序)。在未排序列中找出最大数7,将7和1的位置交换,得到新的数列:254317

8继续相同的过程,最后整个数列将是从小到大排序的。例5.5请把以上数列按从小到大顺序排序。

publicclassEx5_4{publicstaticvoidmain(String[]args){int[]mList={2,8,4,3,7,1,5};System.out.println("mListbeforesortis:");printList(mList);seleSort(mList);System.out.println();System.out

温馨提示

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

评论

0/150

提交评论