1、,主讲:高悟实,JAVA程序设计基础,TEL:88549109 EMAIL:gws,第四章 数组与字符串,3,通过本章的学习,主要掌握以下知识点: 数组的基本概念 数组元素的访问 栈内存和堆内存 字符串 本章的重点: 数组的定义与访问 本章的难点: 栈内存和堆内存 多维数组的定义与应用,4,4.1 数组的基本概念,所谓数组就是相同数据类型的元素按一定顺序排列的集合。在Java中数组元素可以由简单数据类型的量组成,也可以由对象组成。数组中的每个元素都具有相同的数据类型,可以用一个统一的数组名和一个下标来惟一地确定数组中的元素。,5,数组主要有如下几个特点: 数组是相同数据类型的元素的集合; 数组
2、中的各元素是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起; 数组元素用整个数组的名字和它自己在数组中的顺序位置来表示。例如,a0表示名字为a的数组中的第一个元素,a1代表数组a的每二个元素,依次类推。,6,4.2.1 一维数组的定义,使用Java的数组一般要经过三个步骤: 声明数组 创建空间 创建数组元素并赋值 前两个步骤的语法: 数据类型 数组名 ; /声明一维数组 数组名=new 数据类型个数; /分配内存组数组,举例: int x ; x=new int10;,4.2 一维数组,7,在声明数组时,也可以将两个语句合并成一行,格式如下: 数据类型 数组名 = new 数据类型个
3、数; 例如: int x = new int 10;,8,4.2.2一维数组元素的访问,数组元素的引用方式: 数组名下标 其中“下标”可以是整型数或表达式。如a3+i(i为整数)。Java数组的下标是从0开始的。如: int x = new int 10; 其中x0代表数组中第1个元素,x1代表第2个元素,x9为第10个元素,也就是最后一个元素。,9,【例4.1】声明一个一维数组,其长度为5,利用循环对数组元素进行赋值,然后再利用另一个循环逆序输出数组元素的内容。程序代码如下:,10,/app4_1.java 一维数组 public class app4_1 public static voi
4、d main(String args ) int i; int a; /声明一个数组a a=new int5; /分配内存空间供整型数组a使用,其元素个数为5 for(i=0;i=0;i-) /逆序输出数组的内容 System.out.print(“a”+i+”=”+ai+”,t”); System.out.println(“n数组a的长度是:”+a.length); ,11,该程序的运行结果如下: a4=4, a3=3, a2=2, a1=1, a0=0 数组a的长度是:5,12,4.2.3 一维数组的初始化及应用,数组初始化格式: 数据类型 数组名 =初值0,初值1,初值n; 例如: in
5、t a=1,2,3,4,5;,13,【例4.2】设数组中有n个互不相同的数,不用排序求出其中的最大值和次最大值。 /app4_2.java 比较数组元素值的大小 public class app4_2 public static void main(String args ) int i,Max,Sec; int a=8,50,20,7,81,55,76,93; /声明数组a,并赋初值 if (a0a1) Max=a0; / Max存放最大值 Sec=a1; / Sec存放次最大值 else Max=a1; Sec=a0; ,14,System.out.print(“数组的各元素为:”+a0+
6、” “+a1); for(i=2;iMax) /判断最大值 Sec=Max; /原最大值降为次最大值 Max=ai; /ai为新的最大值 else /即ai不是新的最大值,但若ai大于次最大值 if (aiSec) Sec=ai; /ai为新的次最大值 System.out.print(“n其中的最大值是:”+Max); System.out.println(“ 次最大值是:”+Sec); ,15,该程序运行结果为: 数组的各元素为:8 50 20 7 81 55 76 93 其中的最大值是:93 次最大值是:81,16,5.3.1 二维数组,声明与分配内存的格式: 数据类型 数组名 ; 数组
7、名 = new 数据类型 行数 列数;,4.3 多维数组,17,数据类型 数组名 = new 数据类型 行数列数;,用较为简洁的方式声明数组的格式:,18,Java的多维数组不一定是规则的矩阵形式,如图5.5所示。,如:int x; x=new int 3 ;,19,由于x0、x1和x2都是数组引用变量,必须对它们赋值,指向真正的数组对象,才可以引用这些数组中的元素。 x0=new int 3; x1=new int2; 由此可以看出,x0和x1的长度可以是不一样的,数组对象中也可以只有一个元素。程序运行到这之后的内存分配情况如图4.6所示。,20,21,直接在声明二维数组时给数组赋初值格式:
8、 数据类型 数组名 =第1行初值, 第2行初值, , 第n+1行初值 ;,22,【例4.4】计算并输出杨辉三角形。,/app4_4.java 维数组应用的例子:显示杨辉三角形 public class app4_4 public static void main(String args ) int i,j; int Level=7; int iaYong =new intLevel; System.out.println(“杨辉三角形”); for (i=0;iiaYong.length;i+) iaYongi=new int i+1; iaYong00=1;,23,for (i=1;iiaY
9、ong.length;i+) /计算杨辉三角形 iaYongi0=1; for (j=1;j iaYongi.length-1;j+) iaYongij=iaYongi-1j-1+iaYongi-1j; iaYongi iaYongi.length-1=1; for(i=0;i iaYong.length;i+) /显示出杨辉三角形 for(j=0;j iaYongi.length;j+) System.out.print(iaYongij+” ”); System.out.println(); ,24,该程序的运行结果为: 杨辉三角形 1 1 1 1 2 1 1 3 3 1 1 4 6 4
10、1 1 5 10 10 5 1 1 6 15 20 15 6 1,25,5.3.2 三维以上的多维数组,要想提高数组的维数,只要在声明数组的时候将下标与中括号再加一组即可,所以三维数组的声明为int a;,而四维数组为int a;,依次类推。,26,4.4.1字符串变量的创建,格式一: String ; =new String(”字符串”); 如: String s; /声明字符串型引用变量s,此时s的值为null s=new String(”Hello”); /在堆内存中分配空间,并 将s指向该字符串首地址,4.4 字符串,27,格式二: String =new String(”字符串”);
11、 如:String s=new String(”Hello”);,28,格式三: String =”字符串”; 如:String s=”Hello”,29,4.4.2 String类的常用方法,调用Java定义的格式: .;,30,表4.1 String类的常用方法,31,/app4_6.java 字符串应用:判断回文字符串 import java.io.*; public class app4_6 public static void main(String args)throws IOException BufferedReader buf; int i=0,length; String
12、str; boolean yorn=true; buf=new BufferedReader(new InputStreamReader(System.in); System.out.print(请输入字符串n); str=buf.readLine(); length=str.length();,【例4.6】判断回文字符串。,32,while (ilength/2) if(str.charAt(i)=str.charAt(length-1-i) i+; else yorn=false; break; if (yorn) System.out.println(str+是回文字符串); else System.out.println(str+不是回文字符串); ,Thank You!,