Java语言程序设计1-5_第1页
Java语言程序设计1-5_第2页
Java语言程序设计1-5_第3页
Java语言程序设计1-5_第4页
Java语言程序设计1-5_第5页
已阅读5页,还剩98页未读, 继续免费阅读

付费下载

下载本文档

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

文档简介

1、Java语言程序设计主要内容Java概述Java基础Java流程控制方法数组面向对象的程序设计概念类的封装、多态和继承接口和包异常处理输入和输出图形用户界面Applet程序第一章 Java概述程序设计语言面向对象的程序设计语言JavaJava的开发和运行环境开发和运行Java程序的步骤编辑工具1-1 程序设计语言机器语言汇编语言高级语言面向过程的语言:用计算机能理解的逻辑,表达问题的具体解决过程。它将数据和过程分离为独立的实体,使二者不能有效结合到一起,数据结构的些许变化就导致算法的改变,其重用性差。面向对象的语言(OOP):能够直接反应客观世界的本来面目,并且使软件开发人员能够运用人类认识十

2、五所采用的一般思维方法来进行软件开发。在面向对象的程序设计语言中,将客观事物抽象成对象,用一组数据描述对象的静态特征(属性),用一组方法刻画对象的动态特征。在OOP中,用类来描述一组具有相同属性和方法的对象,而通过封装的办法将对象的属性和方法结合为一个整体,并且屏蔽了对象内部的细节,用户使用的是外部的表现。通过消息来表示对象之间的动态联系。1-2 JavaJava语言面向对象、平台无关、多线程、安全可靠,网络编程的主力军。一、Java的发展史1990年 Sun Microsystem公司开展一个Green计划,他们用C+编写嵌入式软件,当时有许多错误。其项目负责人Gosling为解决这些问题开

3、发了一种名为Oak的语言,1994年日臻成熟,注册该语言为Java。现在Java被广泛地用作网络编程语言。二、Java的特点简单性:基本Java系统(编译器和解释器)所占空间不到250KB。面向对象:安全性平台独立:Java源程序经过编译后生成字节码文件,它与具体的计算机无关,只要安装了解释字节码的Java虚拟机(JVM)就可以执行该字节码。多线程:将不同的程序段设置为不同的线程,使各线程独立、并发执行,提高效率。网络功能:可以从全球网络获得资源,并进行处理。执行效率:由于Java的字节码需要经过JVM解释成机器码才能执行,因此速度较慢1-3 Java的开发和运行环境Borland公司的Jbu

4、ilderIBM公司的Visual Age for JavaSymantec公司的VisualCafeSun公司的J2SDK在本教材中主要使用J2SDK开发工具一、J2SDK的安装J2SDK(Java2 Software Development Kit)目前的最新版本是JDK1.5,由于使用较多和比较成熟的是JDK1.4,因此仍以JDK1.4为主进行讲解。J2SDK可以从 Http:/j2se/1.4/download.html 网站免费下载。其有下列几个版本:标准版:Standard Edition企业版:Enterprise Edition小型家电版:Micro Edition其中标准版可

5、以自由下载,企业版需要注册。二、J2SDK的设置为了方便编译和运行Java程序,要对J2SDK进行设置,主要是对path和classpath两个环境变量进行设置,假设J2SDK的安装目录是c:jdk1.4,则需要将path指向c:jdk1.4bin,将classpath设置到c:jdk1.4libtools.jar和.。如果你使用的是Windows2000/XP,则在“控制面板”“系统”“高级”选项卡中单击“环境变量”,添加或修改path和classpath两个环境变量。如果你用的是Windows9598me,则在autoexec.bat中进行设置,例如:Set path=%path%;c:j

6、dk1.4binSet classpath=.;c:jdk1.4libtools.jar这样设置后,可以保证在不同的路径下能够编译和运行程序。1-4 开发和运行Java程序的步骤首先使用编辑工具将源程序输入,并以.java为扩展名存入计算机,再对源程序进行编译,生成扩展名为.class的类文件,它是一种字节码文件,最后运行字节码文件,就可以得到需要的结果。一、Java程序的构成 在适当的编辑工具下编辑下面的小程序public class Example public static void main(String args) System.out.println(Hello Java!); 该

7、程序必须以文件名Example.java名字保存在文件的目录中。下面对该程序进行说明Public class Exampless表明要建立一个类,类名为Example定义类必须用class,Java应用程序必须以类的形式出现,一个程序中可以定义多个类,但是只能有一个public类,文件的名字必须与该类名相同。类的内容,即类中的属性和方法在后面的一对花括号中列出,类的属性用变量描述。Public static void main(String args)建立一个名为main的方法。一个应用程序可以有多个方法,但是只能有一个main。Main方法中只有一条语句System.out.println(

8、Hello Java!),其功能是输出括号中字符串里的内容。其中System是Java类中的一个对象,println是out对象的一个方法,其功能是向标准设备也就是显示器输出括号中的字符串。对于每条语句“;”是其组成部分,而对于类名和方法定义,由于不是语句,所以一定不要有“;”。二、编译和运行Java程序在Windows 下,使用J2SDK编译和运行Java程序是在DOS命令提示符状态下通过命令行来实现的1.编译Java源程序(用javac.exe命令) 其格式为: javac Java源程序文件名.java 例如对于本程序就是: javac Example.java2.运行类文件(用java

9、.exe命令) java Java源程序文件名 Java类文件的扩展名为.class,但在运行时可以不给出,例如,本程序的执行命令就是: java Example第二章 Java基础Java符号数据类型与变量、常量语句、表达式和运算符数据类型的转换2-1 Java符号一、标识符和关键字标识符就是计算机中存在的任何一个成分(如变量、常量、方法和类等),需要有一个名字以标识它的存在和唯一性,这个名字就是标识符。标识符的有关规定:标识符长度不限,实际中名字以有意义的符号为宜标识符必须以字母、下划线和美元号$开头,后面可以跟若干字母、数字、下划线和美元号的组合。标识符区分大小写,例如max和Max被认

10、为是不同的标识符。关键字也称为保留字,是程序设计语言本身已经使用,并被赋予特定意义的标识符,这些标识符在成序设计中不可以再被用作用户标识符使用。这些关键字都是以小写形式出现的,共有59个。二、运算符和分隔符Java中的运算符有算数运算符、逻辑运算符和位运算符等分隔符是指将程序的代码组织成编译器所能理解的形式。Java的分隔符有()、;和空格等三、注释Java的注释有三种方式:(1)/注释内容 (2)/*注释内容 */ (3) /*注释内容*/其中(1)适合独占一行的(2)(3)适合于多行注释2-2 数据类型与变量、常量不同基本数据类型所占的字节数longintshortbytecharbool

11、eanfloatdouble84211148一、数据类型二、常量1.整数类型常数 有三种形式: 十进制,八进制012,十六进制0 x3A2.浮点型常量 (1)小数形式:12.73,-0.24 指数形式:2.5E12,0.12E-4 指数必须是整数 (2)单精度和双精度形式:在常数的后面加上F(f)或D(d)可以表示单精度或双精度常数,12.4F,23.456D3.字符型常量 采用Unicode编码 采用4种形式 (1)用单撇号括起来的一个字符 a 0 (2)转义字符b t n(u000a) f r(u000d) (3)用单撇号括起来的3个八进制字符101 023 (4)用单撇号括起来的4个十六

12、进制字符u01ac u2af34.字符串常量 用一对双撇号扩起来的一串字符 abc Good morning5.布尔型常量 只有true和false两个值,表示逻辑的两种状态。三、变量1.整型变量 有long 、int、short、byte四种根据需要可以将用到的整型变量定义成这四种形式之一。对于范围超过21亿的常数给long型变量赋值的时候,在常量的后面必须加L,否则出错。public class Integer public static void main(String args) byte a=015; byte b=20; byte c=0 x25; short x=30; long

13、 y=1234567890123L; System.out.println(a=+a+ +b=+b+ +c=+c); System.out.println(x=+x+ +y=+y); 程序的运行结果为:a=13 b=20 c=37X=30 y=12345678901232.浮点类型浮点类型的数据有单精度(float)和双精度(double)两种。在给单精度变量赋常数值的时候,常数值后必须有f,而给双精度变量赋常数值的时候,其后的d可有也可没有。public class Floating public static void main(String args) float a=34.45f; d

14、ouble b=3.66e18; System.out.println(a=+a); System.out.println(b=+b); 程序的运行结果为:a=34.45B=3.66E183.字符类型Java采用Unicode编码系统,字符型变量的标识符是char 例如:char ch=d;public class Character public static void main(String args) char ch1=a; char ch2=80; char ch3=n; char ch4=070; char ch5=u0050; System.out.println(ch1=+ch1

15、+ +ch2=+ch2+ch3); System.out.println(ch4=+ch4+ +ch5=+ch5); 程序的运行结果是:ch1=a ch2=PCh4=8 ch5=P4.字符串 字符串常量是用双引号括起来的由0个或多个字符组成的一个字符序列,在字符串中,可以含有转义字符。 对于字符串变量,用关键字String定义。 public class S2_4 public static void main(String args) String str1=abc; String str2=n; String str3=80 070 u0050:; System.out.println(s

16、tr1=+str1+str2=+str2+str3=+str3); 运行结果:str1=abc str2=str380 8 P5.布尔型 布尔型变量的取值只有true和false两种,定义布尔型变量的关键字是boolean public class S2_5 public static void main(String args) boolean instance1=true; boolean instance2=false; System.out.println(逻辑状态1=+instance1+ +逻辑状态2=+instance2); 运行结果:逻辑状态1true 逻辑状态2=false2

17、-3 语句、表达式和运算符一、语句 语句是构成程序的基本单元。 1.语句作为程序的组成部分,可以对计算机发出操作指令,而表达式不能做到。 2.表达式包含运算符和操作数,而语句中包含表达式 3.一条语句必须以“;”作为结束符,从一个语句的开始直到找到“;”才认为一个语句的结束,而不管经过了几行。也就是说一个Java语句可以写在连续的多行上。二、表达式表达式是用运算符把操作数连接起来表达某种运算或含义的式子。每一类运算符都规定了相应类表达式的范围。Java中包含下面一些表达式:算术表达式( * / + - -)关系表达式( = = = !=)逻辑表达式(& | ! & |)位运算表达式( & |

18、)赋值表达式(= += -= *= /= %= =)1.算术表达式 在构成算术表达式的运算符中,有二元运算符(+-*/%)和一元运算符(+ - -)两类,也有的称为单目或双目运算符。 public class S2_6 public static void main(String args) int a=15; int b=7; int c=b/a; int d=a/b; System.out.println(c=+c+ +d=+d); 运行结果: c=0 d=2对于算术运算,当参与运算的两个量类型相同的时候,结果值的类型不变,因此有上面的运算结果。对于一元运算符,+ -只能针对变量应用,并且

19、运算符在变量前或后对于表达式的贡献是有所不同的。 public class S2_7 public static void main(String args) int i=15,j; j=i+; System.out.println(i+=+j); j=+i; System.out.println(+i=+j); j=-i; System.out.println(-i=+j); j=i-; System.out.println(i-=+j); j=-i; System.out.println(-i=+j); System.out.println(i=+i); 运行结果:i+=15+i=17-i

20、=16i-=16-i=-15i=15算术运算符的优先级按从高到低的顺序 ();+、-; *、/、%; + 、-public class S2_8 public static void main(String args) int a=20; int b=7; int d=b*+a; int e=(a/(+b); System.out.println(d=+d); System.out.println(e=+e); 运行结果:d=147e=2对于自增(自减)运算,如果运算符处于变量的后面,则在表达式中是先用变量的原值参与运算,然后再增加变量的值;如果是在变量的前面,则是先对变量增加1,然后把变化后

21、的值应用到表达式中。无论哪种情况,变量最后的值都增加了,只是对表达式的贡献不同。2.关系表达式用关系运算符把两个操作数连接起来。结果为布尔型关系运算符有 = y); boolean d=(float)x/y=(double)x/y); System.out.println(c=+c); System.out.println(d=+d); 运行结果:c=trued=false程序中(float)和(double)是强制类型转换运算符,其作用就是将其后表达式的值转化为括号中的类型。3.逻辑运算符 逻辑运算符共有6个,它们与其它语言的逻辑运算符有一定的区别,其中的与和或都有两个:& & | |,另外

22、还有!(非)和(异或,相同的时候是假,不同时为真)。public class S2_10 public static void main(String args) int time=10; String week=Monday; if(week=sunday | week=saturday) System.out.println(今天我休息); else if(time8 & time (不带符号的右移)。例如:x=132,y=204;计算x和xy的值。首先分别将整数转化为二进制数: x=10000100 y=11001100 public class Swei public static v

23、oid main(String args) int x=132; int y=204; System.out.println(x=+x); System.out.println(xy=+(xy); System.out.println(x2=+(x2); System.out.println(x2=+(x2); 运行结果为:x=-133xy=72x2=33x2=335.赋值表达式 赋值运算由赋值运算符“=”构成,赋值运算符与算术运算符和位运算符结合还构成了一些复合赋值运算符。 = += -= *= /= %= = &= |= = =例如:若x=4,则: x+=x*=x%=x+2 等价于: x=

24、x+(x=x*(x=x%(x+2) x=x+(x=x*(x=x%6) x=x+(x=x*(x=4) x=x+(x=x*4) x=x+(x=16) x=x+16 (此时的x=16) x=32三、数据类型的转换Java要求对变量先定义后使用,也就是说变量一经定义,在整个程序的执行过程中类型不变,但是有的时候我们可以根据要求来转换变量值的类型,这有自动类型转换和强制类型转换两种。1.自动类型转换 转换原则:数据类型兼容、低级向高级转换public class S2_11 public static void main(String args) short a=10; int b=34567; int

25、 c=a*b; float d=123.45f; System.out.println(c=+c); System.out.println(num=+d/b); 程序运行结果:c=345670num=0.00357132522.强制类型转换 强制类型转换一般用在系统要求数据类型不允许是其它类型(例如运算要求必须是整型),以及不安自动处理原则安排的地方(保留一个实数2位小数,对舍去部分四舍五入)public class S2_12 public static void main(String args) int a=15,b=7; float c=a/b; float d=(float)a/b;

26、 int e=a/(int)b; System.out.println(c=+c+ +d=+d+ +e=+e); 程序运行结果:c=2.0 d=2.142857 e=23.自动类型转换 byte-short-int-float-double 运算符的优先级运算符描述级别结合性. ()域,数组,括号1从左到右+ - - ! 一元操作符2从右到左* / %乘,除,取余3从左到右+ -加,减4从左到右 移位运算5从左到右 =关系运算6从左到右= !=关系运算7从左到右&按位与8从左到右按位异或9从左到右|按位或10从左到右&逻辑与11从左到右|逻辑或12从左到右?:条件运算符13从右到左= *= /

27、= %= += -= = &= = |=赋值运算14从右到左第三章 Java流程控制选择结构程序设计循环结构程序设计跳转语句3-1 选择结构程序设计if语句ifelse语句if语句的嵌套switch语句一、if语句if语句的格式 if(条件) 语句其中“条件”一定是逻辑表达式或关系表达式,而“语句”如果有多条,必须放在中。public class S3_1 public static void main(String args) int x,serials,y; y=0; x=Integer.parseInt(args0); serials=Integer.parseInt(args1); i

28、f(x50) y=x*serials; System.out.println(y=+y); 程序运行时在命令行输入:java S3_1 55 11执行结果为:y=605其中55是args0的值,而11是args1的值。Integer.parseInt(args0)是将args0由字符串转换为整型。例3-2 在满足条件下执行两条语句的情况public class S3_2 public static void main(String args) int x,serials,y; y=0; x=Integer.parseInt(args0); serials=Integer.parseInt(ar

29、gs1); if(x50) y=x*serials; System.out.println(y=+y); 在此处,由于满足x50的条件后,要执行两条语句,因此必须加,构成一个复合语句,以限定语句结构。二、ifelse语句这种具有两个分支的语句的一般形式: if(条件) 语句块1 else 语句块2例3-3 根据学生成绩,给出是否及格的信息public class S3_3 public static void main(String args) int score; score=Integer.parseInt(args0); if(score=60) System.out.println(祝

30、贺您的考试成绩通过了!); else System.out.println(对不起,您的考试成绩没有通过!); 在程序运行时,在命令行输入:java S3_3 70 输出为:祝贺您的考试成绩通过了!三、if语句的嵌套在一个if语句的某个结构中又包含另外的if结构称为嵌套。import javax.swing.JOptionPane; /import引用swing包的JOptionPane方法public class S3_4 public static void main(String args) String str; double x,y,z,t; str=JOptionPane.show

31、InputDialog(请输入第一个数); x=Double.parseDouble(str); str=JOptionPane.showInputDialog(请输入第二个数); y=Double.parseDouble(str); str=JOptionPane.showInputDialog(请输入第三个数); z=Double.parseDouble(str); if(xy) t=x;x=y;y=t; if(xz)t=x;x=z;z=t; else if(yz)t=y;y=z;z=t; else if(xz) t=x;x=z;z=t; if(yz)t=y;y=z;z=t; System

32、.out.println(最小值=+x); System.out.println(中间值=+y); System.out.println(最大值=+z); 引用JOptionPane类的showInputDialog方法,显示输入窗口对话框,用来输入数据将输入的字符型数据转换为双精度数赋值给x对于三个术按从小到大顺序输出,也可以采用下面的方法,这种方法没有改变数据原来的值,只是输出顺序的变化 import javax.swing.JOptionPane;public class S3_4_1 public static void main(String args) String str; do

33、uble x,y,z,t; str=JOptionPane.showInputDialog(请输入第一个数); x=Double.parseDouble(str); str=JOptionPane.showInputDialog(请输入第二个数); y=Double.parseDouble(str); str=JOptionPane.showInputDialog(请输入第三个数); z=Double.parseDouble(str); if(xy & yz)System.out.println(x+ +y+ +z); if(xz & zy)System.out.println(x+ +z+

34、+y); if(yx & xz)System.out.println(y+ +x+ +z); if(yz & zx)System.out.println(y+ +z+ +x); if(zx & xy)System.out.println(z+ +x+ +y); if(zy & y0) m=m-1; System.out.println(m=+m); 程序运行结果为:m=3m=2m=1m=0二、dowhile语句dowhile语句的一般形式为: do 循环体 while(条件);public class S3_7 public static void main(String args) int

35、m=4; do m=m-1; System.out.println(m=+m); while(m0); 程序的运行结果与上题一样public class S3_8 public static void main(String args) int i,odddsum,evensum; i=1;oddsum=0;evensum=0; do if(i%2=0) evensum+=1; else oddsum+=i; while(+i=50); System.out.println(奇数和=+oddsum); System.out.println(偶数和=+evensum); 打印正整数150中的奇数

36、之和与偶数之和程序的运行结果为:奇数和625偶数和650三、for语句for语句的一般形式 for(设定初值;循环条件;修改表达式) 循环体 public class S3_9 public static void main(String args) int i,sum=0; for(i=1;i=100;i+) sum+=i; System.out.println(sum=+sum); 程序运行结果为:sum=5050试计算下列的值import javax.swing.JOptionPane;public class S3_10 public static void main(String a

37、rgs) double x,y=0;int m;String str; final double PI=3.14159; for(int i=1;i=3;i+) str=JOptionPane.showInputDialog(请输入一个浮点数); x=Double.parseDouble(str); System.out.println(x=+x); m=(x0)?1:(x20)?2:3); switch(m) case 1:y=Math.abs(x);break; case 2:y=1; for(int j=1;j=x;j+) y*=j; break; case 3:y=Math.log(x

38、);break; System.out.println(y=+y); System.exit(0); 四、循环嵌套public class S3_11 public static void main(String args) long sum=0; for(int i=1;i=6;i+) long m=1; for(int j=1;j=i;j+) m*=j; System.out.println(i+!=+m); sum+=m; System.out.println(1!+2!+.+6!=+sum); 分别输出1!、2!、6!以及它们的和程序运行结果为:1!=12!=23!=64!=245!=

39、1206!=7201!+2!+.+6!=873public class S3_12 public static void main(String args) double i,m=1,n=1,x=1,y=1; for(i=0.2;i0.000001); System.out.println(i=+i+ +结果=+m); 使用级数求近似值:ex=1+x/1!+x2/2!+.+xn/n!+., 其中x=0.2、0.4、.1.0,计算精度为0.000001。计算结果如下:i=0.2 结果=1.2214027555555556i=0.4 结果=1.2214027606349207i=0.6000000

40、000000001 结果=1.221402761015873i=0.8 结果=1.22140276104973563-3 跳转语句break语句continue语句一、break语句break语句只能出现在switch语句以及用于终止for、dowhile等语句的执行,有两种形式,即break和 break label两种形式,使用break label可以终止label标记的外层循环的执行。使用break形式,只能退出当前层循环;使用break label形式则可以退出标号指定的循环。public class S3_13 public static void main(String args

41、) int i,m=0;for(i=1;i+) m+=i; if(m1000)break; System.out.println(i=+i+ +结果=+m); 编制一个证明程序,证明310000之间的数符合角谷猜想。如果不符合请输出开始不符合的数据,并且循环结束。public class S3_14 public static void main(String args) double i,n; search: for(i=3;i=10000;i+) n=i; do if(n%2=0)n/=2; else n=n*3+1; if(n1) System.out.println(i=+i); Sy

42、stem.out.println(This guess if fail); break search; while(n=1); System.out.println(数3到10000之间的数符合角谷猜想); 求解2100之间的素数public class S3_15 public static void main(String args) int i,j,half,n,m=0; for(i=2;i100;i+) n=i; half=n/2; for(j=2;jhalf)System.out.print(素数=+i+ ); m+;if(m%5=0)System.out.println(); 二、

43、continue语句continue语句并不终止当前循环,而是不再执行continue后面的Java语句,结束本次循环,继续执行下一次循环语句或循环判定。public class S3_16 public static void main(String args) for(int i=1;i=5;i+) if(i=3)continue; else System.out.println(i=+i); 输出15之间除了能被3整除的数。求当0n20时,n!大于100而小于2000的n值。public class S3_17 public static void main(String args) i

44、nt n=1,m=1; for(n=1;n20;n+) m*=n; if(m2000)break; System.out.println(n+!=+m); 程序的运行结果是:5!=1206!=720第四章 方法方法声明方法调用参数传递递归4-1 方法声明方法只能在类中声明,其一般格式为: 修饰符 方法值类型 方法名(参数表) 声明部分 语句部分 说明:(1)方法声明包括方法头和方法体两个部分。其中,方法头确定方法的名字、形式参数的名字和类型、返回值的类型和方法限制;方法体由包括在花括号内的说明部分和语句部分组成,描述方法的功能。(2)修饰符可以是公共访问控制符public、私有访问控制符pri

45、vate、保护访问控制符protected等。(3)返回值类型用Java允许的各种数据类型关键字如int,float等指明,反映方法完成其所定义的功能后返回的运算结果的数据类型。如果方法没有返回值,用void关键字指明。(4)方法名要符合标识符的命名规则,不要与Java中的关键字重名。(5)对于有返回值的方法,其方法体中至少有一条return语句,形式为: return (表达式) 当调用该方法时,方法的返回值即此表达式的值。(6)参数表指定在调用该方法时,应该传递的参数的个数和类型。参数表中可以包含多个参数项,相邻的两个参数之间用逗号隔开。每个参数项的形式如下: 类型 参数名 这里的参数名是

46、一个合法的变量名,如果参数作为数组来使用,其名称后面应该加一对方括号。类型指定参数的数据类型,可以是Java允许的各种数据类型关键字如int,float等,这里的参数在定义的时候不占据存储单元,只有在调用的时候才被分配单元。方法也可以没有参数,但其后的一对圆括号不能省略。(7)方法不能嵌套定义,也就是在方法中不能再声明其它的方法。static int S4_1(int x) int s; s=x*x; return (s);这是一个计算平方值的方法,方法只有一个参数,其放回值是int类型。4-2 方法调用采用方法表达式和方法语句的形式1.方法表达式:对于有返回值的方法,可以作为表达式或表达式的

47、一部分来调用,其在表达式中出现的形式为: 方法名(实际参数表)public class S4_2 static int square(int x) int s; s=x*x; return (s); public static void main(String args) int n=5; int result=square(n); System.out.println(result);2.以方法语句的形式调用 调用的一般形式为:方法名(实际参数表)class S4_3 static void area(int a,int b) int s; s=a*b; System.out.println

48、(s); public static void main(String args)int x=5;int y=3;area(x,y);对于方法是void类型的,必须通过方法语句的形式调用无参方法class S4_4 static void sum() int i,j,s; i=3; j=6; s=i+j; System.out.println(s); public static void main(String args) sum(); 虽然方法没有参数,但是在定义和调用的时候,方法名后面的括号不能省略。4-3 参数传递Java采用单向的值传递方式进行虚实结合public class S4_5

49、 static void swap(int x,int y) int temp; System.out.println(Before Swapping); System.out.println(x=+x+ y=+y); temp=x;x=y;y=temp; System.out.println(After Swapping); System.out.println(x=+x+ y=+y); public static void main(String args) int u=23,v=100; System.out.println(Before Calling); System.out.pri

50、ntln(u=+u+ v=+v); swap(u,v); System.out.println(After Calling); System.out.println(u=+u+ v=+v); 程序运行结果为:从程序的执行结果可以看出,在调用方法后,虽然形参的值发生了交换,但是对于实参没有任何影响。4-4 递归递归是自身调用的方法,递归必须具备自己调用自己和递归结束的条件。class S4_6 static long fac(int n) if(n=1)return 1; else return n*fac(n-1); public static void main(String args) i

51、nt k;long f; k=Integer.parseInt(args0); f=fac(k); System.out.println(f); 程序运行的时候,在命令行给出待计算阶乘的数,例如:java S4_6 10运行结果为:3628800递归求阶乘问题:汉诺塔问题class S4_7 static void moves(char a,char c) System.out.println(From +a+ to +c); static void hanoi(int n,char a,char b,char c) if(n=1)moves(a,c); else hanoi(n-1,a,c,

52、b); moves(a,c); hanoi(n-1,b,a,c); public static void main(String args) int n; n=Integer.parseInt(args0); hanoi(n,A,B,C); 程序运行时,在命令行中输入3,可有下面的运行结果。第五章 数组一维数组多维数组数组的基本操作数组应用举例数组参数字符串5-1 一维数组一、一维数组的声明的一般格式 类型标识符 数组名 或 类型标识符 数组名说明:(1)数组名的命名方法同简单的数据类型,可以是任意合法的标识符,最好采用“望文知意”的原则。(2)类型标识符可以是任意的基本类型,如int,lon

53、g,float,double,也可以是类或接口。例如: int score float weight二、一维数组的初始化声明一个数组仅为数组指定了数组名和元素的数据类型,并未指定数组元素的个数,系统无法为数组分配存储空间;而数组经过初始化后,其元素的个数、所占用的存储空间就确定了,该工作可用new完成。1.用new初始化数组(1)先声明数组再初始化 一般格式:数组名= new 类型标识符元素个数 其中“元素个数”必须通过整型常量来表示。例如: int a; a=new int10;则表示a数组有10个元素,其下标从0到9变化,连续存放。a0a1a2a3a4a5a6a7a8a9一个数组初始化后,

54、如果要获得其长度(即元素个数),可以使用属性length获得,其格式为: 数组名.length下面小程序段就是数组初始化的应用。float sum;int i;int score;score=new float100;for(i=0;i100;i+) scorei=2*i+1;sum=0;for(i=0;i100;i+) sum=sum+scorei;sum=sum/100;该程序段首先对数组初始化,然后为数组赋值、求和,最后求平均值。(2)声明的同时进行初始化 将上面初始化时的两条语句合并成一条。其格式为: 类型标识符 数组名=new 类型标识符元素个数或 类型标识符 数组名=new 类型标

55、识符元素个数例如: int b=new int20;这样声明了具有20个元素的整型数组b。2.赋初值初始化数组 其一般格式为: 类型标识符 数组名=初值表例如: int score=89,77,90,69,92,84,56;通过该语句声明了具有7个元素的整型数组score。5-2 多维数组一、二维数组的说明 二维数组的说明与一维数组相似,只是多了一对括号。 类型标识符 数组名 或 类型标识符 数组名二、二维数组的初始化1.用new初始化二维数组 用new关键字初始化二维数组,只是指定数组的行数和列数,为数组分配存储空间,并不给数组元素赋初值。(1)先声明数组再初始化 数组名=new 类型标识符

56、行数列数例如:int a ; a=new int34;这样将a初始化为3行4列的整型二维数组,按行连续存放。如果想知道数组的行数和列数,同样可以用属性length获得,用 数组名.length可以得到数组的行数; 数组名行标.length可以获得数组的列数。Java中,二维数组实际上是当做一维数组来处理的,只不过每个“元素”本身又是一个一维数组的名字。例如前面的二维数组a有3行4列,可以看成a是由a0、a1和a2三个元素构成,只是a0本身又是一维数组的名字,它含有a00, a01,a02,a03四个元素。由于Java将二维数组当成一维数组来处理,所以在初始化的时候允许对各行单独初始化,也允许各

57、行的元素个数不同。这是比较特殊的,在其它语言中很少具有的特点。例如:float b; b=new int2 ; /* 将数组初始化为具有两行的二维数组*/ b0=new int3; /*将b0初始化为三个元素*/ b1=new int5; /*将b1初始化为五个元素*/对数组的初始化甚至可以采用下面的方式: int c ; c=new int3 ; /*将c初始化为具有三行*/ for(int i=0;i3;i+) ci=new int2*i+1; /*将三行分别初始化为1,3,5个元素*/(2)声明的同时进行初始化 类型标识符 数组名 =new 类型标识符行数列数或 类型标识符 数组名=ne

58、w 类型标识符行数列数例如,要声明并初始化前面的数组a,可以按照以下的方式进行: int a =new int342.赋初值初始化数组 可以在声明二维数组的同时给数组元素赋初值。通过初值的组数和每组的个数决定二维数组的行数和每行元素的数目。其格式如下: 类型标识符 数组名 =初值表,初值表,.,初值表 每个初值表是用逗号隔开的初始值,数组后的一对括号也可以移到类型标识符的后面。例如: int grade =65,34,78,81,56,92,92,69,75;该语句声明了一个二维数组grade,其元素类型为int,具有三行,每行有三个元素,数组共有9个元素,按行的顺序在内存中依次存放(在内存中

59、没有3行3列的表,可以看成是一字排开,使用的时候根据下标来确定)。5-3 数组的基本操作一、数组的引用 对数组的引用一般是指对数组元素的引用。数组元素的引用方法是在数组名后面的括号中指定其下标。数组元素几乎能出现在简单变量可以出现的任何情况下,如可以被赋值,可以被打印,可以参加表达式计算。int age ;age=new int3;age1=23;age2=2+age1;二、数组的复制 要将一个数组的诸元素的值复制到另外一个数组的各个元素,可以通过循环语句,逐个元素进行赋值。public class S5_1 public static void main(String args)int c,

60、d,e,i,j;c=new int33;d=new int33;e=new int33;for(i=0;i3;i+) for(j=0;j3;j+) dij=i+j; cij=dij; e=d;for(i=0;i3;i+) for(j=0;j3;j+) System.out.print(eij+ ); System.out.println(); 三、数组的输出 数组的输出通常是逐个元素结合循环语句实现的。例如,下面程序段其功能是首先给数组a的各元素分别赋0、1和2,然后分别在3行输出其各元素的值。int a,i;a=new int3;for(i=0;ia.length;i+) ai=i; Sys

温馨提示

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

评论

0/150

提交评论