1 / 31

Java 技术与应用

Java 技术与应用. - Java 的数组字符串 ( 第 4 章 ). 西安交大 卫颜俊 2008 年 11 月 电子信箱: Mr.Java@163.com QQ: 610568018 网站 : 202.117.58.97/java. 1. 数组 (Array). 数组是一种复合数据类型,代表一组同类型的变量。 数组是一种特殊的对象。 从存储方式来看,数组所代表的变量按顺序连续存放,数组本身使用一个标识符来定义,称为数组名。 所代表的每一个变量称为数组元素,数组元素在内存中所处的位置称为下标。 数组的长度是指数组中的元素个数。

abel
Download Presentation

Java 技术与应用

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Java技术与应用 -Java的数组字符串(第4章) 西安交大 卫颜俊 2008年11月 电子信箱:Mr.Java@163.com QQ: 610568018 网站: 202.117.58.97/java

  2. 1. 数组(Array)

  3. 数组是一种复合数据类型,代表一组同类型的变量。数组是一种复合数据类型,代表一组同类型的变量。 • 数组是一种特殊的对象。 • 从存储方式来看,数组所代表的变量按顺序连续存放,数组本身使用一个标识符来定义,称为数组名。 • 所代表的每一个变量称为数组元素,数组元素在内存中所处的位置称为下标。 • 数组的长度是指数组中的元素个数。 • 数组也遵守一般变量的先定义后使用的原则。

  4. 数组举例 • 记录一个班的10名同学的数学成绩 • 定义10个变量:float score1,score2,…,score10分别存放每个同学的数学成绩 • 定义1个数组变量: score[10] • 其中,score.length ==10 • 每个元素为:score[0],score[1],…,score[8],score[9] • 数组为score[] • score[i](i=0,…,9)类型为float

  5. 一维数组 • 定义格式 类型名 数组名[][=初值];或 类型名[] 数组名[=初值]; 举例: • int ai[]; //定义一个整数数组 • float score[]; //定义一个float数组 • float[] score; • Object ao[]; //定义一个Object数组 • String names[]; //定义一个字符串数组 • byte[] rowvector, colvector, matrix[]; //分别定义两个字节数组和一个字节数组的数组 • MyClass<int>amc[]; //定义一个带参数的对象数组

  6. 一维数组的初始化 数组的定义中并不为数组元素分配内存 • 静态初始化 使用一对大括弧“{}”加数据来对数组进行初始化 举例: • int ai[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};//数组ai有10个数组元素,即ai.length为10,每个元素类型为int • char[] ac = {'n', 'o', 't', ' ', 'a', ' ', 'S', 't', 'r', 'i', 'n', 'g'}; //数组ac有12个数组元素,即ac.length为12,每个元素类型为char • String countryNames[] = { "中国", "美国", "法国"};//数组countryNames有3个数组元素,即countryNames.length为3,每个元素类型为String • MyClass amc[] = { new MyClass(), new MyClass(), new MyClass() };//数组amc有3个数组元素,即amc.length为3,每个元素类型为MyClass • Color colorPalette[] = {Color.RED, Color.GREEN, Color.BLUE };//数组colorPalette有3个数组元素,即colorPalette.length为3,每个元素类型为Color

  7. 一维数组的初始化(2) • 动态初始化 使用构造对象的方法(new运算符)来初始化数组 举例: • int ai[] = new int[10];//数组ai有10个数组元素 • int length = 35; float score[] = new float[length];//数组score有35个数组元素 • String countryNames[] = new String[] { "中国", "美国", "法国"};//数组countryNames有3个数组元素,即countryNames.length为3,每个元素类型为String

  8. 一维数组的引用 举例: for (int i = 0; i < ai.length; i++) { System.out.println(ai[i] * ai[i]); }

  9. 一维数组的完整例子 【例4-1】模拟体育比赛中的胜、平和负3种状态10000次,统计并显示每种状态的次数。 ( (int) (Math.random() * 10000)) % 3 【例4-2】查找数组中是否存在某个数值。 关键代码: for (int x : arrayOfInts) { …}

  10. 二维数组 • 定义格式 • 类型名 数组名[][] [=初值];或 • 类型名[] 数组名[] [=初值];或 • 类型名[][] 数组名[=初值]; 举例: • int ai[][]; • int[] ai []; • int [][]ai;

  11. 二维数组的初始化 二维数组的定义中不为数组元素分配内存, 分静态初始化和动态初始化 举例: 1 : int ai1[][] = new int[3][3]; 2 : int ai2[][] = { 3 : {1, 2, 3}, {4, 5, 6}, { 7, 8, 9} 4 : }; 5 : int ai3[][] = new int[3][]; 6 : ai3[0] = new int[3]; 7 : ai3[1] = new int[2]; 8 : ai3[2] = new int[1]; 9 : int ai4[][] = { 10: {1, 2, 3}, {4, 5}, {6} 11: }; 12: int ai5[][] = { 13: {1, 2}, null, {3, 4, 5} 14: };

  12. 二维数组的引用 举例: for (int i = 0; i < ai4.length; i++) { for (int j = 0; j < ai4[i].length; j++) { System.out.println(ai4[i][j] * ai4[i][j]); } }

  13. 二维数组的完整例子 【例4-4】输出如下所示的杨辉三角形。 三角形中的每一行除最左和最右为1之外,中间的每一行每一列的值=上一行当前列的值+上一行前一列的值。

  14. 数组与算法 java.util.Arrays类和java.lange.System类中提供了数组的初始化、拷贝、克隆、比较、查找与排序等方法。 • 1. 初始化方法:System.fill(a,val); 其中,a为要初始化的数组,val为初始化值。 • 2. 拷贝方法:Arrays.arraycopy(src,srcPos,dest,destPos,length); 其中,src为原始数组,srcPos为原始数组起始下标,dest为目标数组,destPos为目标数组起始下标,length为要拷贝的元素个数。 • 3. 克隆方法:a.clone(); 其中,a为数组,返回值为目标数组。 “=”表示数组引用,而clone表示复制。

  15. 数组与算法(2) • 4. 比较方法:Arrays.equals(a1,a2); 其中,a1、a2为要比较的两个数组, “==”表示为同一个引用,而equals表示元素相等。 • 5. 数组排序方法:Arrays.sort(a); 其中,a为待排数组。 • 6. 查找方法:Arrays.binarySearch(a,key); 其中,a为待查数组,key为查找关键值,返回值为查找到的数组下标,如果未找到,返回-1。 • 7. 元素批输出方法:Arrays.toString(a); 其中,a为待输出数组,返回值为数组元素构成的字符串。如果直接输出a的话,得到的只是a的内存标识号,而不是所有元素值。

  16. 数组举例 • 【例4-7】数组与算法演示。

  17. 数组举例 • 【例4-14】对一组数据进行分析。原始数据如下表6-1所示: • 表6-1 W县2003-2006年苹果产量表(单位:万担) 要求预测2007年的产量,采用的算法: • 算术平均: • 几何平均: • 增长速度: • 发展速度:

  18. 2.字符串(String、StringBuffer、StringBuilder)

  19. 字符串是指用一对双引号将若干个字符括起来组成的字符序列。字符串是指用一对双引号将若干个字符括起来组成的字符序列。 • Java语言中的字符串表面上是字符序列,内部却是使用对象来表示的,不能把字符串与字符数组等同起来。 • 包括定长字符串和可变长字符串 • 有时为了提高存取效率,采用定长字符串,使用String类的对象; • 有时则为了修改的灵活性,采用可变长字符串,使用StringBuffer类的对象。

  20. 定长字符串的定义格式 • String 变量名=<字符串文字量>; 其中,<字符串文字量>为由一对双引号("")括起来的字符序列。 • String() 构造一个空字符串 • String(String original) 由原始字符串构造新的字符串 • String(char[] value) 由字符数组构造字符串 • String(char[] value,int offset,int count) 由字符数组的一部分构造字符串 • 举例: String word="月随碧山转,水合青山流。杳如星河上,但觉云林幽。"; String s=new String(); String firstName=new String("杰克"); char asc[]={'伦', 敦'} String lastname=new String(asc); String name=new String(firstName +'•'+ lastname);

  21. 定长字符串的引用格式 • 对于字符串文字量可以直接使用,而一旦定义好一个字符串变量,就可以按名存取。 • String类提供了一个方法length()取得字符串的长度,即它所包含的字符个数。 • 比如上例中的s.length()为0,name.length()为5等。

  22. 定长字符串的处理算法 • “+”运算符,不但可以将两个字符串拼接,还可以将其它类型的值与字符串拼接,得到一个新的字符串。 • String类的常用方法

  23. 定长字符串举例 • 【例4-8】定长字符串处理方法综合演示。 • 【例4-9】判断字符串是否为回文。

  24. 可变长字符串 • 举例:对于可变长字符串"Dot Saw I",其长度为9,而容量为17。

  25. 可变长字符串的定义格式 • StringBuffer() 构造一个其中不带字符的字符串缓冲区,其初始容量为16个字符。 • StringBuffer(int capacity) 构造一个不带字符,但具有指定初始容量的字符串缓冲区。 • StringBuffer(String str) 构造一个字符串缓冲区,并将其初始化为指定的字符串内容。 • 举例: StringBuffer s1 = new StringBuffer(); StringBuffer s2 = new StringBuffer(28); StringBuffer s3 = new StringBuffer("地球只有一个,请爱惜她!");

  26. 可变长字符串的引用格式 • StringBuffer类提供length()方法计算长度,capacity()方法计算容量。

  27. 可变长字符串的处理算法 • StringBuffer类的常用方法

  28. 可变长字符串举例 • 【例4-10】可变长字符串处理方法综合演示。 • 【例4-11】字符串、字符数组的转换。 • 【例4-12】从字符串中提取单词。

  29. 可变长字符串举例 • 【例4-13】字符串四则运算表达式的计算。 算法简述:StringTokenizer类是java.util包中提供的一个解析字符串的类,其方法如下: • StringTokenizer(String str, String delim) 为指定字符串构造一个StringTokenizer类的对象。其中,str为原始字符串,delim参数中的字符都是起分隔标记作用的分隔符序列。分隔符字符本身不作为标记。 • boolean hasMoreTokens() 测试此标记的字符串中是否还有更多的可用标记。如果此方法返回true,那么后续调用无参数的nextToken方法将成功地返回一个标记。 • public String nextToken() 返回下一个标记。

  30. 综合例子 • 【例4-15】给定一篇英文,要求完成以下功能: (1) 显示所有汉字符号; (2) 将字母转换为大写; (3) 去掉非字母符号; (4) 统计各个字母出现的次数(不区分大小写); (5) 每个字母只保留一个。

  31. 本讲结束! 谢谢!

More Related