2016最新java程序设计教程.ppt

上传人:牧羊曲112 文档编号:5408795 上传时间:2023-07-04 格式:PPT 页数:148 大小:1.26MB
返回 下载 相关 举报
2016最新java程序设计教程.ppt_第1页
第1页 / 共148页
2016最新java程序设计教程.ppt_第2页
第2页 / 共148页
2016最新java程序设计教程.ppt_第3页
第3页 / 共148页
2016最新java程序设计教程.ppt_第4页
第4页 / 共148页
2016最新java程序设计教程.ppt_第5页
第5页 / 共148页
点击查看更多>>
资源描述

《2016最新java程序设计教程.ppt》由会员分享,可在线阅读,更多相关《2016最新java程序设计教程.ppt(148页珍藏版)》请在三一办公上搜索。

1、J a v a 面向对象程序设计,珊瑚老师JAVA 学习交流群514167678,程序设计例题珊瑚老师,1 编程序,打印数字金字塔(输出阶数可变)11 2 11 2 3 2 11 2 3 4 3 2 11 2 3 4 5 4 3 2 11 2 3 4 5 6 5 4 3 2 11 2 3 4 5 6 7 8 7 6 5 4 3 2 1,相关知识点珊瑚老师,Java程序的起点main方法Java基本输入输出打包及导入循环语句,知识点1:main方法珊瑚老师,声明格式:public static void main(String args)注意事项:main方法必须属于一个类,不能独立存在于类外j

2、ava XXX 告诉编译器执行XXX类中的main方法程序执行过程就是main方法执行的过程,main方法执行完最后一条语句,则程序退出参数args:表示程序的执行参数,知识点2:控制台的输入和输出,程序想要与环境进行交互,必须包含输入输出操作:控制台方式标准输出设备(System.out)标准输入设备(System.in)图形界面方式,控制台输出(3.17,P76),Java使用System.out表示标准输出设备(默认为显示器控制台)println方法向标准输出设备打印一行字符串print 方法向标准输出设备输出参数指定的字符串printf 方法向标准输出设备输出指定格式的字符串print

3、f(String format,Object args)format:格式字符串args:实际参数值printf(“the sum of 1 and 2 is%d”,1+2);,控制台输出(3.17,P76),%d,%md(十进制整数)%o(八进制整数)%x,%X(十六进制整数)%f,%m.nf,%-m.nf(浮点)%e,%E,(指数)%g,%G(由数值大小和精度决定输出格式)%s(字符串)%c(字符)%b,%B(布尔),控制台输出(3.17,P76),控制台输入(2.3,P21),9,Java使用System.in表示标准输入设备,从标准输入设备(键盘)读入信息的方法:1.创建Scanner

4、对象()Scanner input=new Scanner(System.in);2.方法next(),nextByte(),nextShort(),nextInt(),nextLong(),nextFloat(),nextDouble(),next-Boolean(),nextLine()分别获取String,byte,short,int,long,float,double,boolean 或一行文本.,Run,Run,ComputerAreaWithConsoleInput,ComputeAverage,知识点3:打包及导入,包(Package)是Java的程序组织方式,允许将不同的类组合

5、成较小的单元便于查找和使用类文件有助于避免命名冲突在使用许多类时,类和方法的名称很难决定。有时需要使用与其他类相同的名称。包基本上隐藏了类并避免了名称上的冲突允许在更广的范围内进行信息隐藏保护类、数据和方法:可以在包内定义类,而在包外的代码不能访问该类(数据或方法),“包将类名空间划分为更加容易管理的块,包既是命名机制也是可见性控制机制”,打包类(8.8,P226),想将一个类放入包中,就必须将包的名字放在源文件的开头,类定义代码前,语法:package 包名;package语句必须是程序的第一条语句如果源文件中没用package语句,该源文件会被放置在默认包中。(默认包是一个没有名字的包),

6、package mypackage;public class Calculate,类的导入(1.9,P14),一个类可以使用其所属包中的所有类,以及其它包中的所有public类访问其它包中的public类有两种方式:使用类的全路径名:date=new();使用import语句:import;(明确导入)import java.util.*;(通配导入)只能导入一个包中的所有类,其子包中的类不会被导入,静态导入,JDK5.0以来,import语句不但可以导入类,还可以导入静态方法和静态属性 import static.*;可以导入System类的所有静态方法和静态字段out.println(“h

7、ello”);,知识点4:循环语句,whiledo-whileforforeach,程序设计例题,2 编写程序,输入三个实数a,b,c,然后按递增顺序把它们输出,相关知识点,Java基础类型Java类型转换Java块判断语句,知识点1:数据类型,byteshortintlongfloatdoublecharboolean,数组枚举类接口,原始数据类型,引用数据类型,整型数据,整型数据简单来说就是整数,Java支持三种形式的整型常量的记法,分别是十进制、八进制和十六进制。十进制常数记法就是日常生活中用的整数的写法:如365,0,-29456。八进制常数记法只需要在前面加个0即可,如012表示十进

8、制数10.十六进制数记法是开头加上0 x或者0X,如0 x12表示十进制数18。-0X10表示十进制数-16。,整型数据(2.8,P25),整型变量按所占存储空间的不同可分为四种不同的类型:byte 8位(1字节)short 16位(2字节)int 32位(4字节)(默认)long 64位(8字节)(10L/10l)注意C和C+中,数据类型的长度与机器相关,而Java中数据类型的长度固定。Java中没有unsigned类型,浮点型数据(2.8,P25),浮点数可以看成数学上的实数。根据浮点型数据存储位长的不同,可分为:单精度浮点数(float):32位(4字节)1.25f/1.25F双精度浮点

9、数(double)64位(8字节)1.25(默认),数值数据类型表示范围,字符型数据(2.13,P35),Java使用单引号来标记字符常量,如A、r就是普通的字符常量(Unicode表)。字符可分为普通字符和特殊字符。控制字符就是一种特殊字符,是指回车、换行、制表等起控制作用的字符。特殊字符使用转义序列进行表示r 回车n 换行t 制表(Tab)、”,字符型数据,与C/C+不同,Java字符类型数据使用 Unicode进行编码,所以Java字符类型数据占用16位(2字节)内存空间,逻辑(布尔)类型(3.2,P55),布尔变量使用关键字boolean定义,用于保存一个逻辑结果布尔常量只有两个:tr

10、ue(真)和false(假)布尔类型值不能与整型相互转换C/C+中,整数中的零值可以和false互相转化,非零值则对应着true。在Java中是不可以的 if(x=0)op1 else op2,枚举类型,如果某个变量的取值只在一个集合之内,则可以使用枚举类型枚举类型的声明格式:enum Size SMALL,MEDIUM,LARGE,EXTRA_LARGE;枚举类型的变量声明:Size s=Size.MEDIUM,字符串(String)类型(2.15,P39),Java字符串就是一个Unicode字符序列,字符串直接量可以使用双引号括起的字符序列表示(“hello”)Java没有内置的字符串类

11、型,但在标准Java库中提供了一个预定义的String类表示字符串类型每个用双引号括起来的字符串都是String类的一个实例 eg String s=“”;String greeting=“Hello”;,字符串类型,字符串拼接:“+”检测字符串是否相等equals()方法检测两个字符串是否相等=则判断两个字符串是否存放在相同的位置,知识点2:类型转换及类型提升2.11,P32,运算符是否可以具有不同类型的操作数?如果两种类型兼容,则可以进行运算,运算时会自动将窄类型提升为宽类型(以数据表达范围为标准)boolean类型与其它类型是不兼容类型byte、char和short类型是平级类型byte

12、、char和 short 型值可提升为 int 型int可以提升到long型long型可以提升到float型float型可以自动提升为double型,类型转换及类型提升,对于表达式所有byte、short和char类型将被提升为int一个操作数为 long 型,整个表达式提升为 long 型一个操作数为 float 型,整个表达式提升为 float 型一个操作数为 double 型,整个表达式提升为 double 型,类型转换及类型提升,自动转化规则,类型强制转换,如果想要将宽类型值赋值给窄类型,则需要强制类型转换强制类型转换使程序将变量视为某种类型,尽管此变量中包含的是另一类型的数据floa

13、t c=34.89675f;/将 c 转换为整型(截尾取整)int b=(int)c+10;,知识点3:Java块,Java块(block)即复合语句,是指由一对花括号括起来的若干简单Java语句类块方法块语句块静态块块确定了变量的作用域方法块和语句块内声明变量的作用域由声明处开始,直到块结束,Java块,块可以嵌套在另一块中,但不能在嵌套的两个块中声明同名的变量public void main(String args)int n;int n;int k;,知识点4:判断语句,单向if双向ifif-else嵌套switch语句,if语句例题:猜生日,通过询问朋友五个问题,猜出他出生于一个月的那

14、一天,GuessBirthday,游戏的数学基础,19 10011.7 111.23 11101,36,switch-case 语句,switch-case 语句可用于替换多选 if-else语句在表达式可以得出多个值的情况下,使用 switch-case 语句会带来更好的效果switch-case 语句的语法为:switch(表达式)case 值1:操作 1 的语句;break;case 值2:操作 2 的语句;break;.case 值n:操作 n 的语句;break;default:默认语句;,表达式计算出的变量值只能是char,byte,short,或 int 类型,常量表达式,并且和

15、表达式计算出的值类型相同,break语句和default语句都不是必须的,switch-case 语句,这个结构的执行过程为:(1)求出switch括号内变量的值(2)将其值顺序地和n1、n2、n3 比较,如果变量值和某个n值相等,程序就转到这个ni后面的语句开始执行,遇到break语句则跳出整个switch语句(3)如果变量值和任何n值都不等,则执行default后面的语句,最后跳出switch结构(4)default 子句可有可无,static int daysInMonth(int month)int days;switch(month)case 2:days=28;break;case

16、 4:case 6:case 9:case 11:days=30;break;default:days=31;return(days);,获取各个月份的天数:,程序设计例题,3.打印n阶杨辉三角形,相关知识点,数组一维数组多维数组,知识点1:数组,在Java程序中,数组具有下列特点:同一数组中的所有元素均属于相同的数据类型,该数据类型称为数组的基本元素类型。数组一经创建,其元素个数就保持不变,这个长度称为数组的长度(length)。数组中的每一个元素均能借助于下标(index)来访问。数组元素的类型既可以是基本类型(如int,float等),也可以是复合类型(如String,Object,甚至

17、数组类型),从而可以产生对象数组、多维数组。,一维数组声明(6.2.1,P158),在Java语言中,一维数组变量声明方式如下:type arrayName;其中:type表示数组元素的类型,可以是8种基本数据类型之一,也可以是引用类型“”用于表明定义的是一个数组 arrayName就是所要声明的数组变量的名字,一维数组定义/创建(6.2.2,P158),在Java中,数组的创建必须使用“new”操作符,创建一维数组的语法格式如下:arrayName=new elementTypeARRAY_SIZE;其中:arrayName为已经声明的一维数组变量名elementType为数组的基类型,它必

18、须是声明array Name时指定的数组基类型或其子类型ARRAY_SIZE为整数类型,它指定了数组的长度数组一旦创建,其长度就不能改变。,数组长度(6.2.3,P159),每个数组对象都有一个名为length的属性保存数组的元素个数 arrayName.length,一维数组初始化(6.2.3,P159),创建数组后,如果没有对数组元素进行初始化,则数组元素被赋值为对应于该元素类型的默认值:数值类型数组中元素的默认值是0字符类型数组元素默认值为u0000布尔类型数组元素默认值为false对象数组中元素的默认值是null,一维数组初始化(6.2.5,P160),对于一维数组可采用如下方法进行初

19、始化:方法一:遍历数组元素进行初始化:int array=new int10;for(int i=0;i array.length;i+)arrayi=someValue;方法二:采用数组初始化列表进行数组创建和初始化,初始化列表中元素的数目就是数组的长度 boolean bArray=false,true,true,false;int iArray=0,1,2;,一维数组元素引用(6.2.4,P159),对数组的元素的访问可以通过下标进行:arrayNameindex;其中:arrayName是声明的数组名index是一个整型数值,用于表示要访问的元素下标(注意下标取值范围应该小于 arra

20、yName.length,0,length)),数组的处理,数组处理经常使用for循环(类型相同,次数固定)for(int i=0;iarray.length;i+)/arrayi相关操作也可以使用foreach循环for(type var:array)/var相关操作 一般用于数组不变的情况下,foreach循环(6.2.7,P161),for each,for each循环用来依次处理数组或集合中的每个元素而不必为指定下标而分心,for(variable:集合)循环体,语法,int a=2,3,3,4;for(int e:a)System.out.println(e);,示例,编写一个选择

21、排序演示程序,该程序将一个一维整型数组按从小到大的顺序排序后输出 算法思想:假设待排序数组长度为n,则进行如下操作:第一次从数组里面找出最小的元素,放在第一个元素(下标为0)的位置;第二次从剩下的元素里面找出最小的元素,放在第二个元素(下标为1)的位置,依此类推,共执行n趟。,/使用选择排序算法进行排序for(int i=0;i array.length;i+)for(int j=i+1;j array.length;j+)if(arrayj arrayi)/交换arrayj 与 arrayi的值int temp=arrayj;arrayj=arrayi;arrayi=temp;,数组的复制(

22、6.5,P166),数组复制就是将一个数组的内容拷贝到另一个数组中,复制后应该有两个一模一样的数组:int source=1,2,3,4,5int target=source;/?,数组的复制,数组复制有三种方法:a.利用循环语句逐个拷贝数组的每个元素int source=1,2,3,4,5int target=new intsource.length;for(int i=0;isource.length;+i)targeti=sourcei;,数组的复制,b.System类的静态方法arraycopy:arraycopy(sourceArray,src_pos,targetArray,tar

23、get_pos,length);sourceArray:源数组 src_pos:源数组复制起始位置 targetArray:目标数组 target_pos:目标数组存放起始位置 length:复制元素个数 eg:System.arraycopy(s,0,t,0,s.length);,数组的复制,c.使用clone方法 int source=1,2,3,4,5;int target=source.clone();注:调用clone方法要求数组的基本元素类型实现 Cloneable接口,多维数组,多维数组就是数组的数组,其数组基类型还是一个数组类型如果一个数组的基类型是一维数组则该数组称为二维数组

24、,如果一个数组的基类型为二维数组则该数组为三维数组,依此类推。在多维数组中访问一个元素要用到不止一个数组下标。,多维数组,多维数组的声明 elementType arrayName;同样的,定义三维数组的语法格式为:elementType arrayName;一般把多维数组各维自左向右依次称为第一维,第二维,多维数组,创建多维数组也要用到new运算符:arrayName=new elementType DIMENSION_1_SIZEDIMENSION_2_SIZE;其中:arrayName为二维数组的名字;elementType为数组的基类型,必须是声明 arrayName时指定的数组元素类

25、型或其子类型;DIMENSION_1_SIZE和DIMENSION_2_SIZE分别指明数组各维的长度。,多维数组,一种简单的声明、创建并初始化二维数组的方法:,60,int array=new int43;array00=1;array01=2;array02=3;array10=4;array11=5;array12=6;array20=7;array21=8;array22=9;array30=10;array31=11;array32=12;,int array=1,2,3,4,5,6,7,8,9,10,11,12;,等价于,多维数组,多维数组元素的访问:arrayNamed1_ind

26、exd2_indexdn_index;其中:arrayName为数组名字;n为数组的维数;d1_index、d2_index、dn_index均为整型变量,代表所要访问的元素在各维中的下标。,多维数组,多维数组的长度:int x=new int34;,62,多维数组,锯齿形数组Java二维数组实际上数组的数组,作为数组基类型的数组可以是不同长度的,多维数组,二维数组的处理:一般情况下使用二重for循环处理二维数组 for(int i=0;ia.length;+i)for(int j=0;jai.length;+j).,程序设计例题,4.编写函数求给定正整数的最大的数据位5.打印所有三位的Arm

27、strong数(数的数值与其各位数字立方和相等)6.打印所有除以11后所得的商正好是它各位数字平方和的三位数,相关知识点,Java运算符,运算符与表达式,7.食堂管理员带1000元钱去市场买鸡,市场价小鸡4元,公鸡12元,母鸡16元。该管理员打算正好买100只鸡,要求三种鸡都要买并尽量多买母鸡。编写程序,替他指定采购方案,8.编写程序实现人机石头剪子布程序,相关知识点,Java常用类Math,Math类(5.10,P137),Math是Java预定义的类(java.lang),该类定义了与数学运算相关操作的集合类常量:PIE类方法:三角函数方法取整方法min,max,abs,和 random

28、方法等,三角函数方法,sin(double a)cos(double a)tan(double a)acos(double a)asin(double a)atan(double a),72,参数为弧度角度与弧度的相互转化:toDegrees(Math.PI/2)toRadians(90),示例:Math.sin(0)returns 0.0 Math.sin(Math.PI/6)returns 0.5 Math.sin(Math.PI/2)returns 1.0Math.cos(0)returns 1.0Math.cos(Math.PI/6)returns 0.866 Math.cos(Mat

29、h.PI/2)returns 0,指数方法,exp(double a)e的a次幂log(double a)a的自然对数log10(double a)以10为底的a的对数pow(double a,double b)a的b次幂.sqrt(double a)a的平方根,73,示例:Math.exp(1)returns 2.71 Math.log(2.71)returns 1.0 Math.pow(2,3)returns 8.0 Math.pow(3,2)returns 9.0 Math.pow(3.5,2.5)returns 22.91765 Math.sqrt(4)returns 2.0Math.

30、sqrt(10.5)returns 3.24,取整方法,double ceil(double x)向上取整double floor(double x)向下取整double rint(double x)返回离x最近的整数;如果两个整数离x距离相同,返回偶数int round(float x)long round(double x)四舍五入,74,示例,Math.ceil(2.1)returns 3.0 Math.ceil(2.0)returns 2.0Math.ceil(-2.0)returns 2.0Math.ceil(-2.1)returns-2.0Math.floor(2.1)return

31、s 2.0Math.floor(2.0)returns 2.0Math.floor(-2.0)returns 2.0Math.floor(-2.1)returns-3.0Math.rint(2.1)returns 2.0Math.rint(2.0)returns 2.0Math.rint(-2.0)returns 2.0Math.rint(-2.1)returns-2.0Math.rint(2.5)returns 2.0Math.rint(-2.5)returns-2.0Math.round(2.6f)returns 3 Math.round(2.0)returns 2 Math.round(

32、-2.0f)returns-2 Math.round(-2.6)returns-3,75,min,max和 abs方法,max(a,b)min(a,b)返回最大值或最小值abs(a)返回绝对值,76,Examples:Math.max(2,3)returns 3 Math.max(2.5,3)returns 3.0 Math.min(2.5,3.6)returns 2.5 Math.abs(-2)returns 2Math.abs(-2.1)returns 2.1,random 方法,示例:,规律:,random()返回0.0,1.0)区间的任意数,9.精确计算a*b,相关知识点,Java常用

33、类String,String类,为了表示字符串,在java.lang包中定义了类String用于表示不可变的字符串为了提高效率、节约内存,Java对具有相同的字符序列的字符串直接量使用同一实例:String s1=“hello”;String s2=“hello”;,String 类的构造方法,String 类,字符串长度:length(),字符串,长度,由 length()方法确定,语法,public int length();,返回字符串中的字符数,String 类,String name=John Smith;System.out.println(name.length();,Strin

34、g 类,String s1=“hello”;/s1=“hello”;?String s2=“hello”;/s1=s2;?String s3=new String(“hello”);/s1=s3?String s4=new String(“hello”);/s3=s4?,字符串比较=/equals(),字符串 1,字符串 2,字符串 1,字符串 2,由 equals()方法确定,检查组成字符串内容的字符,同一个对象,用=运算符检查,检查字符串是否指向同一个或不同的对象,String 类,String 类,搜索字符串,86,字符串 1,情形 1:,indexOf(char)方法indexOf(S

35、tring)方法lastIndexOf方法,找到第一个匹配,索引,0 1 2 3,情形 2:,如果没有找到匹配,则返回-1,返回找到的第一个匹配的位置索引,8.1.2 String 类,提取/拼接/替换/分隔字符串,87,String 类,更改字符串中字符的大小写,88,Hello,使用 toUpperCase()方法,HELLO,HELLO,使用 toLowerCase()方法,hello,语法,public String toUpperCase();,语法,Public String toLowerCase();,String 类,String 类,字符串与数组间的转换,StringBuf

36、fer/StringBuilder 类,90,String类,创建后,直接修改,不变性的概念,解决方法,StringBuffer 类,String 的对等类,表示可增加和可编写字符的可变序列,将字符插入到字符串中间或附加到字符串末尾,StringBuffer/StringBuilder 类,91,StringBuffer用于表示可以修改的字符串,可以替换String类使用,StringBuffer/StringBuilder 类,92,93,public class StringBuf/*构造方法*/protected StringBuf()public static void main(St

37、ring args)StringBuffer buf=new StringBuffer(Java);buf.append(“Guide Ver1/”);buf.append(3);int index=5;buf.insert(index,Student);index=23;buf.setCharAt(index,.);int start=24;int end=25;buf.replace(start,end,4);String s=buf.toString();/StringBuffer对象与String的转换 System.out.println(s);,10.百灯判熄 有100盏灯,编号1

38、-100,分别对应100个控制开关。开始时全部开关朝上(表示开),然后进行以下操作:编号凡是1的倍数灯反向拨开关一次,编号为2倍数的灯再反向拨一次,问:最后有为熄灭状态灯的编号?,11.公安人员审问四个偷窃嫌疑犯A、B、C、D A:是B偷的,不是D偷的 B:我没有偷,是C偷的 C:A没有偷,是B偷的 D:我没有偷,我用的是我家里的 已确切地知道,四个人中只有一个是偷窃者。还知道四人说的话中要么全是实话,要么全是假话。请根据四个人的答话,判断谁是偷窃者,三种基本算法,递推递归迭代,递推法,递推法:递推法实际上是一种递推关系,就是为了得到问题的解,把它推到比原问题简单的问题求解,可分为:顺推法倒推

39、法,递推(顺推),斐波那契兔子问题:有一对小兔子,出生一个月后变大兔子开始怀孕;再过一个月生出一对小兔子,这时共有两对兔子;同时大兔子再次怀孕;第三个月,以前出生的小兔子变成大兔子,以前怀孕的大兔子又生出一对小兔子,这时共有三对兔子(两对大兔子,一对小兔子),所有大兔子又都全部怀孕;第四个月,以前出生的小兔子变成大兔子,以前怀孕的大兔子又各生出一对小兔子,这时共有五对兔子(三对大兔子,两对小兔子),所有大兔子又都怀孕.假设在兔子生养过程中没有死亡,编程序,计算n个月后,有多少对兔子 F1=1;F2=1;Fn=Fn-1+Fn-2,递推(顺推),楼梯有24阶台阶,如果一步走1阶或2阶,试问有多少种

40、走法?u1=1,u2=2;un=un-1+un-2,递推,海盗分金块问题 10名海盗抢得了窖藏的100块金子,并打算瓜分这些战利品。他们的习惯是按下面的方式进行分配:最厉害的一名海盗提出分配方案,然后所有的海盗(包括提出方案者本人)就此方案进行表决。如果50%或更多的海盗赞同此方案,此方案就获得通过并据此分配战利品。否则提出方案的海盗将被扔到海里,然后下一名最厉害的海盗又重复上述过程。他们是残忍的,都乐于看到他们的一位同伙被扔进海里;他们是贪婪的,都千方百计多得一些金块然而他们是聪明的,而且知道其他的海盗也是聪明的。这些金块不能再分,也不允许几名海盗共有金块,最凶的一名海盗应当提出什么样的分配

41、方案才能使他获得最多的金子呢?,递推(逆推),六个顾客买花。第一个买走全部的1/2加 1/2盆,第二个买走剩余的1/3加1/3盆,第三个买走剩下的1/4加1/4盆,第四个顾客买走剩余的1/5加1/5盆,第五个顾客买走剩余的1/6加1/6盆,第六个顾客一看还剩9盆,便全部买走。请问共有多少盆花?un-1=(un+1/n)(n-1)/n,一个猴子摘了一堆桃子,第一天吃了一半零一个,第二天吃了剩余的一半零一个,第三天又吃了剩余的一半零一个,如此下去,第十天吃完后剩余一个桃子。编程求猴子最初摘了几个桃子,递归,汉诺塔问题:一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三

42、根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔庙宇和众生也都将同归于尽。,考虑一下把64片金片由一根针上移到另一根针上,并且始终保持上小下大的顺序。这需要多少次移动呢?这里需要递归的方法。假设有n片,移动次数是f(n).显然f=1,f=3,f=7,且f(k+1)=2*f(k)+1。此后不难证明f(n)=2n-1。n=64时

43、,f(64)假如每秒钟一次,共需多长时间呢?一个平年365天有 31536000 秒,闰年366天有31622400秒,平均每年31556952秒,计算一下,年 这表明移完这些金片需要5845亿年以上,而地球存在至今不过45亿年,太阳系的预期寿命据说也就是数百亿年。真的过了5845亿年,不说太阳系和银河系,至少地球上的一切生命,连同梵塔、庙宇等,都早已经灰飞烟灭。,相关知识点:,方法(第5章,P123),定义方法的动机,在程序编写过程中,存在这样一些操作,除了操作的数据不同外,其它执行过程都是一样的为了减少代码编写量、便于程序的维护,可以将这些代码放在一个位置方法使用别人定义的功能,无需(无法

44、)知道其具体的实现原理,只需按照要求传递参数即可信息隐藏(黑盒),方法定义,方法:为了完成某个操作组织在一起的语句集合 定义方法的语法:修饰符 返回值类型 方法名(参数列表)方法体,方法签名,方法签名:方法的标识,由方法名和参数列表组成,形式参数,形式参数:在方法头中定义的变量,实际参数,方法调用时,会传递一个值给参数,该值就会被实际参数引用,返回值类型,方法执行会返回一个值,返回值类型是该值的数据类型。如果该方法不返回任何值,则返回值类型使用关键字void声明,调用方法,使用方法的动作叫做调用(call/invoke):int larger=max(3,4);System.out.print

45、ln(“hello world”);,调用方法,方法追踪,i为5,animation,方法追踪,j 的值为2,animation,方法追踪,116,调用 max(5,2),animation,方法追踪,调用 max(i,j)i 值传递给 num1j值传递给 num2,animation,方法追踪,声明变量result,animation,方法追踪,(num1 num2)为真,animation,方法追踪,result赋值为5,animation,方法追踪,返回result,5,animation,方法追踪,return max(i,j)返回,并把返回值赋值给k,animation,方法追踪,执

46、行打印语句,animation,方法调用栈,栈追踪,i 变量声明并初始化,animation,栈追踪,j 变量声明及初始化,animation,栈追踪,声明变量k,animation,栈追踪,调用 max(i,j),animation,栈追踪,将i和j的值分别传递给num1 和 num2,animation,栈追踪,声明变量result,animation,栈追踪,(num1 num2)为真,animation,栈追踪,将num1 赋值给result,animation,栈追踪,返回结果并赋值给k,animation,栈追踪,执行打印语句,animation,参数传递(重点理解),参数顺序匹配

47、调用方法时,需要提供实参,实参的次序必须与方法声明中形参的次序相同值传递对于直接量(8种基本数据类型)值拷贝对于引用变量拷贝引用变量的值(地址),按值传递,136,例1:,Increment,例2:,TestPassByValue,数组传递是按值传递的,但“值”指的是引用的值,而不是数组的值,public class Test public static void main(String args)int x=1;/x 引用一个int值 int y=new int10;/y 引用一个int数组值 m(x,y);/使用x,y作为实参调用函数m public static void m(int n

48、umber,int numbers)number=1001;/向number赋一个新值 numbers0=5555;/向numbers0附一个新值,140,示例目的:展示使用基础数据类型变量和数组变量传递参数的不同,TestPassArray,Run,141,6.2.7 数组参数,方法重载(Overload),在一个类中有两个或多个方法,这些方法具有相同的方法名,但参数列表不同,这些方法被称为重载方法重载的方法必须具有不同的签名(即参数列表必须不同),不能基于修饰符或返回值重载方法调用重载方法时会出现歧义调用,这时会产生一个编译错误,TestMethodOverloading,变量作用域,变量

49、的作用域:指变量可以在程序中引用的范围局部变量的作用域从变量声明的地方开始,直到包含该变量的块结束为止。局部变量在使用前必须声明和初始化。形式参数也是一个局部变量,其作用域是整个方法for循环初始化动作部分定义的变量的作用域是整个for循环非嵌套块可以定义同名变量,嵌套块则不可以,可变长参数列表,Java支持将类型相同,个数可变的参数传递给方法语法:typename parameterName 编写程序,实现任意个整数的加法 int add(int numbers)int sum;for(int i=0;inumbers.length;+i)sum+=i;return sum;注:可变参数实际上就是一个一维数组,八皇后问题:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法,迭代法,迭代是通过从一个初始估计出发寻找一系列近似解来解决问题(一般是解方程或者方程组)的数学过程,为实现这一过程所使用的方法统称为迭代法,迭代,用迭代法求某数f的平方根。已知求平方根的迭代公式为:x n+1=(xn+f/xn)/2要求前后两次求出的差的绝对值小于10-5,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号