JAVA编程 数组.ppt_第1页
JAVA编程 数组.ppt_第2页
JAVA编程 数组.ppt_第3页
JAVA编程 数组.ppt_第4页
JAVA编程 数组.ppt_第5页
已阅读5页,还剩37页未读, 继续免费阅读

下载本文档

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

文档简介

1、第5章 数组,程序中常用的数据结构:同类型数据的集合,数组中的每个数据称为元素,元素按照一定顺序线性排列 好处:可以用同一名称引用多个变量,并用下标将它们区分开来。 数组元素的类型可以是任何基本类型或引用类型(类,数组,接口),5.1 一维数组,声明数组时需要确定数组名,数组的维数和数组元素的数据类型。 5.1.1 一维数组的声明 声明数组的语法格式: 数据类型 数组名; 或 数据类型 数组名 数组为引用类型,声明引用类型变量时,系统只为该变量分配引用空间。 5.1.2 一维数组的创建与初始化 数组初始化 为声明的数组指定数组元素个数,为数组元素分配空间并赋值。,1直接指定初值的方式 char

2、 a = N,C,E,P,U; 2用new关键字创建数组(会自动初始化) (1)先声明数组,再创建并初始化数组 数据类型 数组名; 或 数据类型 数组名; 数组名=new 数据类型数组长度; (2)在声明数组的同时用new关键字初始化数组 数据类型 数组名 = new 数据类型数组长度; 或 数据类型 数组名 = new 数据类型数组长度;,char a; a = new char5;,char a =new char 5;,用new创建数组,数组元素默认值: 若为数值型,数组元素的默认值为0; 若为布尔型,数组元素的默认值为false; 若为引用型,数组元素的默认值为空(null)。 3.

3、用一个已经初始化的数组对数组引用初始化 数据类型 数组名=已初始化数组;,并没有真正创建数组(分配内存) int a=new int10; int b=a; 这种初始化会使得数组a与b具有相同的存储地址。并没有真正创建数组b,而是将引用b指向数组a。,4混合方式 int a = new int 1,2,3,4; 5.1.3 一维数组的使用 数组名n (n为0元素个数1) 可以当作数组元素类型的一个变量使用,这里必须为空的,char a =new char 5; a0 a1 a2 a3 a4,数组下标越界 Java提供运行时检查,若数组下标越界,则产生运行时异常。 数组数据成员length:表示

4、数组元素个数,int intArray; intArray=new int4; intArray0=3; intArray1=4;,在Java中, 数组名是引用 数组是对象 length是其数据成员 数组元素也相当于其数据成员,【例5-2】使用数组的数据成员length示例 public class HelloWorld public static void main(String args) int a=1,2,3,4,5,6,7,8,9; int sum=0; for(int i=0;i a.length ;i+) sum+=ai; System.out.println(sum=+sum)

5、; ,方法参数传递,5.1.4 传递数组元素到成员方法 数组元素可以单独作为变量使用,因此,数组元素可以像其他普通变量一样,做为实参传递给成员方法供其使用。 数组元素的数据类型是基本数据类型 按值传递。 数组元素为引用类型 按引用传递。,【例5-3】试图交换数组两元素值的例子 class Change public void swap(int a, int b) System.out.println(交换前形参:n a=+a+ b=+b); int temp;temp=a;a=b;b=temp; System.out.println(交换后形参:n a=+a+ b=+b); public cl

6、ass Test5_3 public static void main(String args) int arr=5,8; Change c = new Change(); System.out.println(交换前实参:n arr0=+arr0+ arr1=+arr1); c.swap(arr0, arr1); System.out.println(交换前实参:n arr0=+arr0+ arr1=+arr1); ,5.1.5 传递整个数组到成员方法 访问控制符 返回值 方法名(数据类型 数组名) 按引用传递,class A static void f ( int a ) for(int

7、i=0;ia.length;i+) ai=100; puclic class Test public static void main(String args) int b=new int 10; A.f ( b ); ,【例5-4】采用数组名作为形参 class Change public void swap( int arr ) System.out.println(交换前形参:n arr0=+arr0+ arr1=+arr1); int temp; temp=arr0; arr0=arr1; arr1=temp; System.out.println(交换后形参:n arr0=+arr0

8、+ arr1=+arr1); ,public class Test5_4 public static void main(String args) int arr=5,8; Change c = new Change(); System.out.println(交换前实参:n arr0=+arr0+ arr1=+arr1); c.swap(arr); System.out.println(交换后实参:n arr0=+arr0+ arr1=+arr1); ,5.1.6 数组运算 1数组最大值、最小值和平均值,【例5-5】求出一个数组的最大值、最小值、平均值 import java.util.Sc

9、anner; class Array /计算数组元素最大值 public int getMax(int a) int max=a0; for(int i=0;ia.length;i+) if(maxai) max=ai; return max; ,/计算数组元素最小值 public int getMin(int a) int min=a0; for(int i=0;iai) min=ai; return min; /数组元素求和 public int getSum(int a) int sum=0; for(int i=0;ia.length;i+) sum+=ai; return sum;

10、,/计算数组元素平均值,调用getSum方法 public double getAverage(int a) double avg; avg=getSum(a)*1.0/a.length; return avg; public class Test5_5 public static void main(String args) Scanner scan = new Scanner(System.in); int a= new int5; System.out.println(请连续输入5个整数); for(int i=0;ia.length;i+) System.out.print(第+(i+

11、1)+个整数:); ai= scan.nextInt(); ,Array myArray = new Array(); System.out.println(数组的最大值为:+myArray.getMax(a); System.out.println(数组的最小值为:+myArray.getMin(a); System.out.println(数组的和为:+myArray.getSum(a); System.out.println(数组的平均值为: + myArray.getAverage(a); ,Scanner类介绍 Scanner scan = new Scanner(System.in

12、); 定义一个Scanner类的类对象,在定义过程中,Scanner有多个构造方法,这里使用的是其中一个,传递的参数System.in是标准输入,即从键盘输入。 scan.nextInt()表示从键盘上读入一个整数 Scanner类的常用方法见下表,注意,方法next的返回值是String类型。,2数组的排序 冒泡排序:,例:从大到小 算法思想:每次将第i个大的数放在第i个位置上(外层循环) 放置的方法是:从最后一个数length-1到i+1 ,比较其与其前面的数是否满足从大到小的要求,若不满足,交换两个数 (内层循环),【例5-6】冒泡排序示例 import java.util.Scanne

13、r; class SortClass public void sort(intarr) int temp; for( int i=0; ii; k- - ) if( arrkarrk-1 ) temp = arrk; arrk= arrk-1; arrk-1= temp; paint(i+1,arr); /打印数组元素,用于排序时检测每趟的排序结果,time:第几趟,arr:数组名 public void paint(int time,int arr) System.out.print(n第+time+趟排序:); for(int i=0;iarr.length;i+) System.out.

14、print(arri+t); ,public class Test5_6 public static void main(String args) Scanner scan = new Scanner(System.in); int n=5;/数组元素个数 int arr= new intn; System.out.println(请从键盘上输入+n+个数:); for(int i=0;in;i+) System.out.print(第+(i+1)+个整数:); arri=scan.nextInt(); SortClass sc = new SortClass(); sc.sort(arr);

15、 System.out.println(n排序后数组元素值:); for(int i=0;iarr.length;i+) System.out.print(arri+t); ,3数组特定数据的查找 线性查找:遍历数组中的所有元素。 public int indexOf( int arr,int value ) for(int i=0;iarr.length;i+) if(arri=value) return i; return -1; 二叉查找:适应于已排序数组。 思想:查找数组中位于中间位置的元素,并将其与查找值进行比较,如果两者相等,就返回该数组元素的下标值;否则,将问题简化为查找已排序数

16、组的一半元素如果查找值小于数组的中间元素,就查找数组的前半部分,否则就查找数组的后半部分(假设数组按升序排序)。,【例5-7】二叉查找算法示例 import java.util.Scanner; class ArraySearch public int indexOf(int arr,int value) int low=0; int high=arr.length-1;int middle; while( low=high ) middle=(low+high)/2; if( arrmiddle=value ) return middle; else if( arrmiddlevalue )

17、 low=middle+1; else high=middle-1; return -1; ,public class Test5_7 public static void main(String args) int arr=1,3,5,7,9,11,13; ArraySearch as = new ArraySearch(); System.out.print(请输入要查询的值:); Scanner in = new Scanner(System.in); int value = in.nextInt(); int index=as.indexOf(arr, value); System.o

18、ut.println(value+ 在数组arr中的下标位置为:+index); ,5.1.7 数组元素的复制 实现数组元素的复制:“System.arraycopy”方法: public static void arraycopy(Objectsrc, intsrcPos, Objectdest, intdestPos, intlength) 各参数的意义: src 源数组。 srcPos 源数组中的起始位置。 dest 目标数组。 destPos 目标数据中的起始位置。 length 要复制的数组元素的个数。 方法的具体含义: 从源到目标数组复制元素(从src引用的源数组到dest引用的目

19、标数组) 复制从源数组的指定位置srcPos开始,复制到目标数组的指定位置destPos。复制元素数量为length个。,【例5-8】利用arraycopy实现数组元素复制 public class Test5_8 public static void main(String args) int a=12,43,54,56,78; int b=new int8; System.arraycopy(a, 1, b, 2, 4); for(int i=0;ib.length;i+) System.out.print(bi+t); ,5.1.8 数组元素的排序 数组排序的方法,类Arrays的一个静

20、态方法sort,该方法其中一个原型为: public static void sort(inta,intfromIndex,inttoIndex) 各参数意义: a 要排序的数组 fromIndex 要排序的第一个元素的索引(包括) toIndex 要排序的最后一个元素的索引(不包括) 该方法具体含义: 如果fromIndex=toIndex,则排序范围为空。 如果想要对数组所有元素进行排序,sort的另一个重载方式: public static void sort( inta) sort排序算法是一个经过调优的快速排序法。sort方法可以针对数组元素为基本类型的数组进行排序,因此,其重载方法

21、比较多,共17个之多,有兴趣的读者可以查阅JDK文档了解详情。,【例5-9】利用sort方法实现一个数组的排序 import java.util.Arrays; import java.util.Scanner; public class Test5_9 public static void main(String args) Scanner scan = new Scanner(System.in); int n=5; /数组元素个数 int arr= new intn; System.out.println(请从键盘上输入+n+个数:); for(int i=0;in;i+) System

22、.out.print(第+(i+1)+个整数:); arri=scan.nextInt(); Arrays.sort(arr); System.out.print(排序后:); for(int i=0;iarr.length;i+) System.out.print(arri+t); ,5.1.9 对象数组 由自定义的类对象作为数组元素所构成的数组被称为对象数组。 即:数组的元素为引用类型(是自定义的类),Point ptArray=new Point4; ptArray0=new Point(0,0); ptArray1=new Point(1,2);,null,null,注:引用类型元素默

23、认值为null,故元素对象需用new创建,【例5-10】设有若干名学生,每个学生有姓名,性别和成绩三个属性,要求将每个学生作为一个对象,建立获取对象名字的成员方法getName和获取对象性别的成员方法getSex,以及输出对象全部数据成员的成员方法print。 class Student private String name;private char sex;private int score; Student(String name,char sex,int score) =name; this.sex = sex;this.score= score; public St

24、ring getName() return ; public char getSex() return this.sex; void print() System.out.println(Name:++tSex:+this.sex+ tScore:+this.score); ,public class Test_10 public static void main(String args) Student stu = new Student3; stu0 = new Student(张三,男,88); stu1 = new Student(李四,女,95);

25、 stu2 = new Student(王五,男,79); for(int i=0;istu.length;i+) stui.print(); ,5.1.10 命令行参数 main方法参数: public static void main( String args ) args:字符串数组,用于接收命令行参数 命令行参数 java 类名 命令行参数 命令行参数:空格分隔的字符串,分别送入args数组的各个元素。,【例5-11】命令行参数args示例 public class Test5_11 public static void main(String args) System.out.pri

26、ntln(查看args参数:); if(args.length=0) System.out.println(没有使用args参数); else for(int i=0;iargs.length;i+) System.out.print(argsi+t); ,java Test5_11 I like Java,args0“I” args1“like” args2“Java”,使用eclipse运行带参数java程序,(1)点击菜单Run,选择子菜单Run Configurations。 (2)在如下界面中输入args参数值,这里输入的是“I love java”,5.2 多维数组,5.2.1 二

27、维数组的声明 声明格式如下: 数据类型 数组名; 或 数据类型 数组名; 或 数据类型 数组名; 其中: 数据类型可以是Java的基本类型和引用类型 数组名要求是一个合法的标识符 两个“”,表示是一个二维数组。,5.2.2 二维数组的初始化 1 用new关键字初始化数组 (1)数据类型 数组名; 或 数据类型 数组名; 或 数据类型数组名; 数组名= new 数据类型length1length2; (2) 数据类型 数组名 = new 数据类型length1length2; 或 数据类型 数组名 = new 数据类型length1length2; 或 数据类型 数组名 = new 数据类型length1length2;,2用一个已经初始化的数组对数组初始化,数据类型 数组名=已初始化数组,3直接指定初值的方式 int a = 1,2,3,4,5,6; 这样就定义了一个3行2列的数组。,int b=new int54; int a=b; 两个引用指向同一个数组,5.2.3 不规则数组 非矩阵数组 1直接指定初值方式 例: int a = 1,2,3,4,5,6,7,8,9; 就定义了一个不规则数组,这样,数组中各元素包括: a00, a01, a02, a10, a11, a20, a21, a22, a23,2用new关键字初始化数组 Java

温馨提示

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

评论

0/150

提交评论