Java语言程序设计电子课件 第6章 数组和字符串_第1页
Java语言程序设计电子课件 第6章 数组和字符串_第2页
Java语言程序设计电子课件 第6章 数组和字符串_第3页
Java语言程序设计电子课件 第6章 数组和字符串_第4页
Java语言程序设计电子课件 第6章 数组和字符串_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

JAVA语言程序设计6.1数组的基本概念6.2多维数组6.3String类6.4数组案例本章小结第6章

数组和字符串教学目标:数组和字符串是Java当中最常用的类类型。本章主要介绍一维数组和二维数组的基本概念及常用方法,几种常用的字符串类的基本概念和常用方法。并结合实例说明数组和字符串的在工程中的应用。教学重点:掌握Java中数组和字符串的概念。掌握数组和字符串中常用方法。了解几种字符串类的区别。第6章

数组和字符串6.1.1基本概念有时候,我们需要定义多个同类型的变量,表示一组相同意义的值。如一个班有30名学生,该班级学生的数学成绩需要定义30个变量来表示。这是很繁杂的工作,在操作中也十分不方便。为了解决这样的问题,Java提供了一种数据类型——数组。数组允许用户使用同一个名字存放一组相同类型的数据。但需要注意,数组是一个类,该类的作用是存放一组相同类型的变量。1.声明为了使计算机操作系统具有更好的并发性,减少程序在并发执行时所付出的时空开销,在操作系统中引入了线程的概念。线程是进程中的一个实体,是被系统调度和分配的基本单元,每个程序至少包含一个线程,就是“主线程”。6.1数组的基本概念6.1.1基本概念1.声明数组声明的格式:类型数组名[];如inta[];

chars[];上面两行分别是声明了一个整型的数组和一个字符型的数组,数组的名字分别是a和s。但因为数组是类,所以a和s是数组类的引用。就算数组中存储的数据是基本数据类型,一个数组也是一个对象。在Java中也允许将[]放到数组名字的前面。如:int[]a;

char[]s;这种方法更容易理解,声明一个整形数组,数组名字为a。这与声明一个基本类型的格式是一致的。6.1数组的基本概念6.1.1基本概念2.初始化声明一个类的引用并没有在内存中为数据开辟空间,需要初始化后才能使用。数组有两种初始化的方法:静态初始化和动态初始化。(1)静态初始化:数组在声明的同时进行赋值初始化。如要定义一个有5个元素的整型数组方法如下:inta[]={1,2,3,4,5};6.1数组的基本概念6.1.1基本概念2.初始化声明一个类的引用并没有在内存中为数据开辟空间,需要初始化后才能使用。数组有两种初始化的方法:静态初始化和动态初始化。(2)动态初始化:数组在声明时,使用new运算符开辟空间,指定数组长度。同样要定义一个有5个元素的整型数组的动态初始化方法如下:inta[]=newint[5];或者是:inta[];a=newint[5];然后再对数组a的5个元素赋值。a[0]=1;a[1]=2;a[2]=3;a[3]=4;a[4]=5;6.1数组的基本概念6.1.1基本概念3.数组的边界当定义完数组并为其分配了内存空间后,就可以引用数组中的每一个元素了。数组的边界下标是从0开始的,一直到数组的长度减1。index为数组下标,可以是整型常数或表达式,如上面提到的整形数组a的5个元素分别是a[0],a[1],a[2],a[3],a[4]。数组的下标也可以用表达式来计算,如a[i*2]等。在Java中,数组有一个length属性是专门用于存储数组长度的。a.length代表数组a的长度,它的值就是5。6.1数组的基本概念publicclassExample6_1{ publicstaticvoidmain(Stringargs[]){ int[]a=newint[6];//定义数组a inti; for(i=0;i<6;i++){ a[i]=i*2;//数组a每个元素赋值 System.out.println("a["+i+"]="+a[i]); }//打印结果 }}【例6-1】定义一个长度为6的数组,并为其赋值,每个元素的值就是它的下标的二倍,然后将数组打印出来。6.1.2数组的拷贝3.数组的边界数组是一个类的对象,当需要将一个数组里面的元素复制给另外一个数组时,直接赋值是行不通的。下面的例子说明了这个问题。【例6-2】定义两个数组a,b,将数组a赋值后,要求将数组a的值一一对应赋给数组b。改变a元素的值,查看数组b的值是否发生变化。6.1数组的基本概念publicclassExample6_2{ publicstaticvoidmain(Stringargs[]){ inta[]={1,2,3,4,5};//定义数组a,b intb[]; b=a;//将a的值赋给b a[3]=100;//改变a[3]的值; for(inti=0;i<5;i++){ System.out.println(b[i]);//打印数组b} }}【例6-2】定义两个数组a,b,将数组a赋值后,要求将数组a的值一一对应赋给数组b。改变a元素的值,查看数组b的值是否发生变化。publicclassExample6_3{ publicstaticvoidmain(Stringargs[]){ inta[]={1,2,3,4,5};//定义数组a,b intb[]=newint[5]; System.arraycopy(a,0,b,0,5);//将a的值赋给b a[3]=100;//改变a[3]的值; for(inti=0;i<5;i++){ System.out.println(b[i]);//打印数组b} }}【例6-3】定义两个数组a,b,将数组a赋值后,要求将数组a的值一一对应赋给数组b。改变a元素的值,查看数组b的值是否发生变化。publicclassExample6_4{ publicstaticvoidmain(String[]args){ Pointp[]=newPoint[10];//声明10个元素的数组; inti; for(i=0;i<10;i++){ p[i]=newPoint(i); //从原点起为数组赋值; } System.out.println("函数上的10个坐标点为:"); for(i=0;i<10;i++){ System.out.print("第"+(i+1)+"个坐标点为:"); System.out.println("x="+p[i].x+",y="+p[i].y); }//打印坐标点;}}classPoint{//坐标点类 floatx; floaty; publicPoint(floatx){ this.x=x; this.y=3*x;//坐标点赋值;}}【例6-4】要求打印出函数y=3x在坐标轴上的10个坐标点。多维数组被看作是存储数组的数组。比如二维数组是一个特殊的一维数组,其每一个元素又是一个一维数组,如下图所示。三维数组是一个特殊的一维数组,其存储的每一个元素是一个二维数组。以此类推,高维数组都可以看做是一个一维数组,每个元素都是一个数组。本节主要以二维数组为例来说明。6.2多维数组6.2.1基本知识1.声明二维数组声明的格式:类型数组名[][];例如:inta[][];chars[][];也可以采用另一种声明方式:int[][]a;char[][]s;6.2多维数组6.2.1基本知识2.初始化同一维数组一样,二维数组在声明后也需要初始化才能使用。二维数组的初始化也分为静态初始化和动态初始化。(1)静态初始化:数组在声明的同时进行赋值初始化。如初始化一个二维的整型数组方法如下:inta[][]={{1,2},{3,4},{5,6}};这时不用指出数组每一维的大小,系统会根据初始化的值,自动计算每一维的大小是多少。数组a有3个大元素,因此最高维的大小是3。每个大元素里又有2个小元素,因此低维的大小是2。也可以说这是一个3行2列的数组。6.2多维数组6.2.1基本知识2.初始化同一维数组一样,二维数组在声明后也需要初始化才能使用。二维数组的初始化也分为静态初始化和动态初始化。(2)动态初始化:数组在声明时,使用new运算符开辟空间,指定数组长度。同样要定义一个3行2列的数组动态初始化方法如下:inta[][]=newint[3][2];或者是:inta[][];a=newint[3][2];然后再对数组a的每一个元素赋值。a[0][0]=1;a[0][1]=2;a[1][0]=3;a[1][1]=4;a[2][0]=5;a[2][1]=6;6.2多维数组6.2.1基本知识2.初始化同一维数组一样,二维数组在声明后也需要初始化才能使用。二维数组的初始化也分为静态初始化和动态初始化。需要特殊注意的是,Java的高维数组允许里面每一个数组元素的长度是不同的。如下面是一个二维字符型数组的声明和初始化。charc[][]=newchar[3][];c[0]=newchar[3];c[1]=newchar[5];c[2]=newchar[4];c[0][0]=’e’;c[0][1]=’g’;c[0][2]=’g’;c[1][0]=’t’;c[1][1]=’o’;c[1][2]=’u’;c[1][3]=’c’;c[1][4]=’h’;c[2][0]=’m’;c[2][1]=’o’;c[2][2]=’o’;c[2][3]=’n’;6.2多维数组6.2.1基本知识3.下标引用多维数组的每一维的数组边界下标都是从0开始的。也是用length属性存储数组长度。a.length代表数组a的最高维的长度,它的值就是3。对于二维字符型数组c来说,定义变量获取它每一维的长度。intx=c.length;intx1=c[0].length;intx2=c[1].length;intx3=c[2].length;这时,x的值是3,x1的值是3,x2的值是5,x3的值是4。6.2多维数组6.2.2异类集合前面介绍的数组内容都是相同类型的对象,这种对象集合称为同类集合。Java中也允许不同类的对象放到一个数组中,这种对象集合称之为异类集合。在前面第三章介绍过Empoloyee是员工类,Manager是经理类,Empoloyee是Manager类的父类。可以定义一个数组,将父类的Empoloyee类的对象和子类的Manager类的对象都存储在一起。ObjectA[]=newObject[5];A[0]=newObject();A[1]=newEmpoloyee();A[2]=newManager();需要注意的是,这样的异类集合在声明时,一定要声明为父类的类型。如上面涉及到三个类,A声明为Object类型的对象。这样才能存放子类的对象。这是符合第三章中介绍的多态的赋值规则的。6.2多维数组publicclassExample6_5{ publicstaticvoidmain(String[]args){ floatscore[][]=newfloat[10][4];//存放成绩的数组; inti,j; floatsum,ave;//第一个学生的成绩; score[0][0]=78;score[0][1]=69;score[0][2]=84; score[1][0]=69; score[1][1]=67; score[1][2]=88; score[2][0]=85; score[2][1]=98; score[2][2]=71; score[3][0]=66; score[3][1]=73; score[3][2]=65; score[4][0]=88; score[4][1]=64; score[4][2]=62; System.out.println("学生\t数学\t英语\t语文\t平均分"); for(i=0;i<5;i++){ sum=0; System.out.print("第"+(i+1)+"个:"); for(j=0;j<3;j++){ System.out.print(score[i][j]+"\t"); sum=sum+score[i][j];//三科成绩的和; } ave=sum/3; score[i][3]=ave;//平均值放到数组中; System.out.println(score[i][3]);}}}【例6-5】用数组存储10个学生的数学英语语文三科成绩,并计算每个学生的平均成绩。在Java中有两种类型的字符串,一种是创建以后不能改变的字符串常量,另一种是创建后可以进行各种修改操作的字符串变量。String类用于存储和处理不能改变的字符串常量;StringBuffer类和StringBuilder类都可以用于存储和操作字符串变量。6.3String类6.3.1基本知识String类是Java语言中提供的系统类,用于表示字符串,类中已定义了字符串的构造器和常用方法。String对象是不变的unicode字符序列。String类表示的字符串其内容不能修改,长度也是确定,相当于字符串常量。他的最基本元素是字符,一个字符可以是字母、数字、标点符号或其他的符号。6.3String类6.3.1基本知识1.字符串的实例化字符串对象的实例化有两种方式,一种是直接创建字符串,另一种是调用String类的构造方法来创建。下面分别说明如下:(1)直接赋值

字符串常量是可以是用双引号括住的一串字符串,例如"Hello",从形式上看于其他语言没有什么差别,而实际上用双引号括起来的字符串常量是被Java默认为创建了一个String类的无名对象。也可以通过直接赋值的形式来对字符串进行实例化。Strings="HelloWorld!";Stringname="王琳";这些方式都是给字符串直接赋值。6.3String类6.3.1基本知识1.字符串的实例化字符串对象的实例化有两种方式,一种是直接创建字符串,另一种是调用String类的构造方法来创建。下面分别说明如下:(2)调用构造方法

String类的构造方法很多。下面将举例说明我们常用的构造方法和使用每一种构造方法创建String对象的过程。①String();无参的构建器,用来创建一个空字符串。例如:Strings=newString();②String(字符串参数);用一个现有的字符串来创建新对象。例如:Strings=newString("abc");Strings1=newString(s);6.3String类6.3.1基本知识1.字符串的实例化字符串对象的实例化有两种方式,一种是直接创建字符串,另一种是调用String类的构造方法来创建。下面分别说明如下:(2)调用构造方法

String类的构造方法很多。下面将举例说明我们常用的构造方法和使用每一种构造方法创建String对象的过程。③String(char[]);用字符型数组作为参数来创建新对象。charcharArray[]={'H','e','l','l','o'};Strings1=newString(charArray);6.3String类6.3.1基本知识1.字符串的实例化字符串对象的实例化有两种方式,一种是直接创建字符串,另一种是调用String类的构造方法来创建。下面分别说明如下:(2)调用构造方法

String类的构造方法很多。下面将举例说明我们常用的构造方法和使用每一种构造方法创建String对象的过程。④String(char[],intoffset,intlength);其中参数offset表示起始位置length表示字符个数。例如:Strings2=newString({'H','e','l','l','o'});char[]Array={'H','e','l','l','o','J','a','v','a'};Strings3=newString(Array,5,4);//生成串"Java"6.3String类6.3.1基本知识2.字符串的比较String的比较有两种方式,一种是使用”==”符号,进行字符串地址值的比较,另一种是使用equals(Strings)方法进行字符串内容的比较。(1)使用“==”进行比较:==是进行字符串地址的比较,当符号两边的字符串地址相同时,返回值为真,否则返回值为假。例如:Stringstr1="hello";Stringstr2=newString("hello");Stringstr3=str2;字符串在内存中的存储情况简单表示如下:6.3String类6.3.1基本知识2.字符串的比较String的比较有两种方式,一种是使用”==”符号,进行字符串地址值的比较,另一种是使用equals(Strings)方法进行字符串内容的比较。(2)equals(ObjectanObject)方法:该方法是String类覆盖了Object类中的publicbooleanequals(ObjectanObject)方法。表示将此字符串与指定的对象比较。当且仅当该参数不为null,并且是与此对象表示相同字符序列的String对象时,结果才为true。也就是对字符串的值进行比较,当值相同时,返回值为真,否则返回值为假。例如Stringstr1="hello";Stringstr2=newString("hello");Stringstr3=str2;那么表达式str1.equals(str2);str1.equals(str3);str3.equals(str2);的返回值都为真。因为他们都存储了"hello"这个字符串的值。6.3String类publicclassExample6_6{publicstaticvoidmain(String[]args) {Strings=newString("hello"); Strings2=newString("hello"); Strings3=s2; if(s==s2) {System.out.println("s==s2的值为真,字符串地址相同");} else {System.out.println("s==s2的值为假,字符串地址不同");} if(s3==s2) {System.out.println("s3==s2的值为真,字符串地址相同");} else {System.out.println("s3==s2的值为假,字符串地址不同");} }}【例6-6】创建字符串对象,并使用==符号来进行字符串的比较。6.3.1基本知识3.String类对象两种实例化方式的区别(1)使用直接赋值的方式创建对象,当对象的值相同时,地址一定相同,即表示同一个字符串对象。例如:Stringstr1="hello";

Stringstr2="hello";

Stringstr3="hello";这三个字符串的值相同,代表了同一个字符串对象,所以不论使用==还是equals方法进行比较,返回值都为真。(2)通过new关键字调用构造方法来创建对象,每创建一个对象都开辟了新的内存空间,所以对象的地址不相同。但是对象可以存储相同的字符串值。

Stringstr=newString("hello");表示关键字new调用了String类的有一个字符串型参数的构造器方法创建了一个对象,并把对象的地址放到了String类的引用str中。当我们再次写出代码str=newString("hello");表示再次在内存中开辟一段空间,存储新的对象。6.3String类publicclassExample6_7{publicstaticvoidmain(String[]args){ Stringstr1="hello"; Stringstr2="hello"; Stringstr3=newString("hello"); Stringstr4=newString("hello");System.out.println("(str1==str2)="+(str1==str2));System.out.println("(str2==str3)="+(str2==str3));System.out.println("(str3==str4)="+(str3==str4));System.out.println("str1.equals(str2)="+(str1.equals(str2)));System.out.println("str2.equals(str3)="+(str2.equals(str3)));System.out.println("str3.equals(str4)="+(str3.equals(str4)));}}【例6-7】调用构造方法创建String类的对象,使用==和equals方法进行字符串比较。6.3.2String类常用方法String类中提供了很多方法,下面简单列出字符串的常用方法。(1)常见的字符串方法6.3String类6.3.2String类常用方法String类中提供了很多方法,下面简单列出字符串的常用方法。(1)常见的字符串方法6.3String类6.3.2String类常用方法String类中提供了很多方法,下面简单列出字符串的常用方法。(2)+运算符:可以用于字符串与其他数据类型数据的连接。例如Strings="Result="+3;s的值为字符串Result=3;字符串与其他数据类型的数据使用+运算符进行连接的时候,其他的数据直接转换为字符串,例如System.out.println("输出为:"+5+6);结果为字符串输出为:56,而并不是字符串输出为:11。6.3String类6.3.2String类常用方法String类中提供了很多方法,下面简单列出字符串的常用方法。(3)字符串的不变性:字符串的内容一旦声明则不可改变。改变的只是字符串的引用。例如:Stringstr="hello";//创建字符串str=str+"world!";//str与字符串world!进行连接,然后赋值给str

6.3String类publicclassExample6_8{ publicstaticvoidmain(Stringargs[]) {Strings1="welcomeyou"; Strings2="JAVAWORLD."; ptr("Lengthofs1is"+s1.length()); Strings=s1.concat(s2); ptr(s); Stringsub1=s1.substring(7); System.out.println(sub1.trim().equals("you")); ptr(s1.toUpperCase()); ptr(s2.toLowerCase()); } publicstaticvoidptr(Objecto){ System.out.println(o);} }【例6-8】字符串的常用方法的调用与字符串不变性的测试。6.3.3字符串类型与基本数据类型的相互转换1.将字符串转换成基本类型数据是指把字符串类型的数值,转换成其他的基本数据类型的数据。例如把字符串“3.14”转换成真正的数值3.14。在Java语言中各个数据类型有相应的Wrapper类(在第3章中有详细的介绍),通过各个基本类型的类方法parseXXX来实现的。该方法的格式是:类名.parse类名(String类数值),如果字符串表示的不是合法的数字,会出错。下面列举将字符串转换成基本类型数据的语句:byteresult=Byte.parseByte("24");shortresult=Short.parseShort("-234");intresult=Integer.parseInt("456");longresult=Long.parseLong("123456");floatresult=Float.parseFloat("2.15");doubleresult=Double.parseDouble("3.14159265");都可以字符串转换成基本的数值。6.3String类6.3.3字符串类型与基本数据类型的相互转换2.将基本类型数据转换成字符串是指把基本数据类型的数据,直接转换成字符串类型的值。例如把数值3.14,转换成字符串类型的”3.14”。这个转换需要通过String类的方法valueOf来实现,该方法有多个重载,一般形式为:s.valueOf(parament);其中参数parament可以是各种基本类型,也包括boolean类型。例如:Strings=String.valueOf(3.14);语句。6.3String类publicclassExample6_9{ publicstaticvoidmain(Stringargs[]){ bytea=Byte.parseByte("24"); shortb=Short.parseShort("-234"); intc=Integer.parseInt("456"); longd=Long.parseLong("123456"); floate=Float.parseFloat("2.15"); doublef=Double.parseDouble("3.14159265"); System.out.println("Result="+a+""+b+""+c+""); System.out.println("Result="+d+""+e+""+f); } }【例6-9】将基本数据类型的数据转换成字符串。importjava.io.IOException;//引入流需要的包;publicclassExample6_10{ publicstaticvoidmain(String[]args)throwsIOException{ Stringpwda,pwdb;//定义两个字符串型变量接收密码。 bytebuffer[]=newbyte[512]; pwdb="1234";//假设已经取到正确密码存储到变量中。 System.out.println("pleaseInputpassword:"); System.in.read(buffer);//接收用户的输入; pwda=newString(buffer);//将输入存到字符串变量中; pwda=pwda.trim();//去掉输入的回车;

if(pwdb.equals(pwda)){//比较输入密码和正确密码 System.out.print("成功登录!"); } else{ System.out.print("密码错误!"); } }}【

温馨提示

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

评论

0/150

提交评论