《JAVA编程技术03.ppt》由会员分享,可在线阅读,更多相关《JAVA编程技术03.ppt(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Java程序设计教材:教材:Java程序设计简明教程程序设计简明教程中国水利水电出版社第第3章章 程序控制结构程序控制结构 算法(算法(algorithm)是是“在优先步骤内求在优先步骤内求解某一问题所使用的一组定义明确的有序的规解某一问题所使用的一组定义明确的有序的规则则”,即编写程序的思路。程序是依据算法使,即编写程序的思路。程序是依据算法使用计算机程序设计语言编写的文本,它是语句用计算机程序设计语言编写的文本,它是语句的集合。制定程序中各语句的执行次序称为程的集合。制定程序中各语句的执行次序称为程序流程控制,即程序的控制结构。程序的控制序流程控制,即程序的控制结构。程序的控制结构分为顺序
2、、选择、循环及异常处理结构结构分为顺序、选择、循环及异常处理结构。1/13/20232Java 程序设计3.1 Java程序控制结构程序控制结构 程序控制指定程序中语句的执行顺序。到程序控制指定程序中语句的执行顺序。到目前为止,前面做过的程序都是顺序执行的。目前为止,前面做过的程序都是顺序执行的。然而,通常遇到的情况都要求提供语句执行然而,通常遇到的情况都要求提供语句执行的选择步骤。的选择步骤。If半径半径radius为负,则为负,则程序显示输入错误的信息;程序显示输入错误的信息;else 程序计算面积并显示结果;程序计算面积并显示结果;1/13/20233Java 程序设计3.2条件语句条件
3、语句Java有几种条件语句:简单if语句,ifelse语句,嵌套if语句,switch语句和条件表达式。3.2.1简单简单if语句语句简单if语句只在条件为真时执行一个操作。其语法如下if(布尔表达式)语句(组);1/13/20234Java 程序设计3.2.2 ifelse语句语句 当指定条件为真时简单当指定条件为真时简单if语句执行一个操作,语句执行一个操作,当条件为假时什么也不干。当条件为假时什么也不干。if(布尔表达式布尔表达式)布尔表达式为真时执行的语句(组);布尔表达式为真时执行的语句(组);else 布尔表达式为假时执行的语句(组);布尔表达式为假时执行的语句(组);1/13/2
4、0235Java 程序设计3.2.3 if语句的嵌套语句的嵌套 if或或ifelse语句中的语句可以是任意合法语句中的语句可以是任意合法的的Java语句,包括其他语句,包括其他if或或ifelse语句。内语句。内层的层的if语句称为嵌套(语句称为嵌套(nested)在外层在外层if语句语句中。内层中。内层if语句又可以包含另一个语句又可以包含另一个if语句,事语句,事实上嵌套的深度没有限制。实上嵌套的深度没有限制。1/13/20236Java 程序设计3.2.4 switch语句语句swithch(switch-expression)casevalue1:statement(s)1;break
5、;casevalue2:statement(s)2;break;casevalueN:statement(s)N;break;default:statement(s)-for-default;1/13/20237Java 程序设计switch语句遵从下述规则:语句遵从下述规则:l l表表达达式式switch-expression必必须须能能计计算算出出一一个个char、byte、short或或int型型值值,并并且且必必须须用用括括号括住它。号括住它。l l Value1,ValueN必必须须与与switch-expression的的值值具具有有相相同同的的数数据据类类型型。要要注注意意Val
6、ue1,ValueN都都是是常常量量表表达达式式,也也就就是是说说在表达式中不能有变量,如在表达式中不能有变量,如1+x是不容许的。是不容许的。l l当当switch-expression的的值值与与case语语句句的的值值相相匹匹配配时时,将将从从该该case语语句句开开始始执执行行,直直到到遇遇到到一个一个break语句或到达语句或到达switch语句的末端。语句的末端。1/13/20238Java 程序设计l l关关键键字字break是是可可选选的的。Break语语句立即终止整个句立即终止整个switch语句。语句。l l默默认认情情况况(default)是是可可选选的的,它它用用来来执
7、执行行指指定定情情况况与与switch-expression都不匹配时的操作。都不匹配时的操作。case语句是顺序检测的,这些语句是顺序检测的,这些case的顺序的顺序(包括默认情况)是无所谓的。但是,将所(包括默认情况)是无所谓的。但是,将所有情况按照逻辑顺序排列并把默认情况放在有情况按照逻辑顺序排列并把默认情况放在最后是良好的编程风格。最后是良好的编程风格。1/13/20239Java 程序设计3.2.5 条件表达式条件表达式 variable=booleanExpression?expression1:expression2;(变变量量=布布尔尔表表达达式式?表表达达式式1:表达式:表达
8、式2)符号?和:在条件表达式中同时出现时,它符号?和:在条件表达式中同时出现时,它们构成一个条件运算符(们构成一个条件运算符(conditional operator),),也称为三目运算符(也称为三目运算符(ternary)。)。它是它是Java中唯一的一个三目运算符。中唯一的一个三目运算符。1/13/202310Java 程序设计3.3循环结构循环结构 循环(循环(loop)是控制语句块重复执行的结是控制语句块重复执行的结构。循环中要重复执行的语句称为循环体构。循环中要重复执行的语句称为循环体(loop body)。)。循环体的一次执行称为一次循环体的一次执行称为一次循环迭代(循环迭代(i
9、teration of the loop)。)。每个循每个循环包含一个循环条件(环包含一个循环条件(loop-continuation-condition),),它是控制循环体执行的布尔表它是控制循环体执行的布尔表达式。每次选代之后都要重新计算循环条件。达式。每次选代之后都要重新计算循环条件。若条件为真,重复执行循环体,若条件为假,若条件为真,重复执行循环体,若条件为假,循环终止。循环终止。1/13/202311Java 程序设计3.3.1 while循环循环while循环的语法如下:循环的语法如下:while(循环条件循环条件continue-condition)/循环体循环体语句(组);语
10、句(组);如果循环体只有一条语句或没有语句,如果循环体只有一条语句或没有语句,while循环以及其他循环中的花括号可以省略。循环以及其他循环中的花括号可以省略。1/13/202312Java 程序设计 循环条件是一个布尔表达式,它必须放在括循环条件是一个布尔表达式,它必须放在括号中。在循环体执行前总是先计算循环条件,号中。在循环体执行前总是先计算循环条件,若条件为真,执行循环体,若条件为假,整个若条件为真,执行循环体,若条件为假,整个循环中断并且程序控制转移到循环中断并且程序控制转移到while循环语句循环语句后的语句。后的语句。例:例:intcount=0;while(count100)Sy
11、stem.out.println(“WelcometoJava!”);count+;1/13/202313Java 程序设计3.3.2 do_while循环循环 do_while循循环环是是while循循环环的的变变体体。它它的的语语法如下:法如下:do/循环体;循环体;语句(组);语句(组);while(循环条件);循环条件);1/13/202314Java 程序设计 先执行循环体,再计算循环条件,若计算结先执行循环体,再计算循环条件,若计算结果为真,再执行循环体,若为假,则终止果为真,再执行循环体,若为假,则终止do_while循环。循环。While循环与循环与do_while循环循环的主
12、要差别在于循环体的计算和循环条件的执的主要差别在于循环体的计算和循环条件的执行顺序不同。行顺序不同。while循环条件循环条件do_while循环循环具有相同的表达能力,有时一种比另一种更方具有相同的表达能力,有时一种比另一种更方便。便。1/13/202315Java 程序设计3.3.3 for循环循环一般地,一般地,for循环语法如下:循环语法如下:for(初始化操作;循环条件;每次循环后的操作)初始化操作;循环条件;每次循环后的操作)/循环体;循环体;语句(组);语句(组);for循环语句以关键字循环语句以关键字for开始,然后是括号开始,然后是括号括住的初始化操作、循环条件和每次循环后的
13、括住的初始化操作、循环条件和每次循环后的操作,以及括在花括号中的循环体。初始化操操作,以及括在花括号中的循环体。初始化操作循环条件和每次循环后的操作用分号分隔。作循环条件和每次循环后的操作用分号分隔。1/13/202316Java 程序设计 一般情况下,一般情况下,for循环使用一个变量来控制循环使用一个变量来控制循环体的执行次数和终止条件。这个变量称为循环体的执行次数和终止条件。这个变量称为控制变量(控制变量(control variable)。)。通常,初始通常,初始化操作初始化控制变量,每次循环后的操作增化操作初始化控制变量,每次循环后的操作增加或减少控制变量,而循环条件检验控制变量加或
14、减少控制变量,而循环条件检验控制变量是否达到终止值。是否达到终止值。1/13/202317Java 程序设计importjavax.swing.JOptionPane;publicclassch0303publicstaticvoidmain(Stringargs)floatsum=0;for(floati=0.01f;i=1.0f;i=i+0.01f)sum+=i;JOptionPane.showMessageDialog(null,Thesumis+sum,Example3.3Output,JOptionPane.INFORMATION_MESSAGE);1/13/202318Java 程
15、序设计3.3.4 循环嵌套循环嵌套 嵌套循环由一个外层循环和一个或多个内嵌套循环由一个外层循环和一个或多个内层循环组成。每当外层循环重复时,就重新进层循环组成。每当外层循环重复时,就重新进入内部循环,并执行所有需要的迭代。入内部循环,并执行所有需要的迭代。3.3.5 循环结构小结循环结构小结 一个循环程序结构由四部分组成:初始化、循环条件、循环体和循环结束处理。1/13/202319Java 程序设计初初始始化化部部分分只只在在进进入入循循环环前前执执行行一一次次,完完成成循循环环前前的的准准备备工工作作,如如设设置置计计算算变变量量的的初初值值、设置循环变量的初值,保证正确进入循环计算。设置
16、循环变量的初值,保证正确进入循环计算。循循环环条条件件部部分分取取决决于于循循环环计计算算继继续续与与否否,它它包包含含在在循循环环结结构构中中,反反复复执执行行。循循环环条条件件是是指指循循环环继继续续的的条条件件,它它是是一一个个逻逻辑辑表表达达式式。满满足足循循环环条条件件继继续续执执行行循循环环体体,否否则则终终止止循循环环,转转向循环结构出口。向循环结构出口。循环体是反复执行的部分,它又分成两部分:循环体是反复执行的部分,它又分成两部分:执行迭代或穷举的计算部分和循环变量的修改执行迭代或穷举的计算部分和循环变量的修改部分,遗忘循环变量的修改会出现部分,遗忘循环变量的修改会出现“死循环
17、死循环”。1/13/202320Java 程序设计设计循环程序结构应注意:设计循环程序结构应注意:(1)正正确确设设置置循循环环变变量量的的初初值值,应应保保证证进进入入循循环;环;(2)如如果果循循环环变变量量的的初初值值在在循循环环体体中中设设置置,则则为为“死循环死循环”;(3)循循环环体体中中不不可可忘忘记记包包含含循循环环变变量量的的修修改改部部分分,并并且且保保证证循循环环变变量量趋趋向向不不满满足足循循环环条条件件的的方向的修改,否则会出现方向的修改,否则会出现“死循环死循环”;(4)避免使用实数型的循环变量和实数相等比)避免使用实数型的循环变量和实数相等比较的循环条件,否则会出
18、现较的循环条件,否则会出现“死循环死循环”。1/13/202321Java 程序设计3.4跳转语句跳转语句跳跳转转语语句句break和和continue,可可以以用用在在循循环环语句中为循环提供附加控制。其作用是:语句中为循环提供附加控制。其作用是:l lbreak:立立刻刻终终止止包包含含它它的的最最内内层层循循环。通常与环。通常与if语句一起使用。语句一起使用。l lcontinue:只只结结束束当当前前迭迭代代,将将程程序序控控制制转转移移到到循循环环体体末末尾尾。通通常常与与if语语句句一一起起使用。使用。在在switch语句中已经用过关键字语句中已经用过关键字break,也可以将也可
19、以将break和和continue用在循环语句之用在循环语句之中。中。1/13/202322Java 程序设计publicclassch0305publicstaticvoidmain(Stringargs)intsum=0;intnumber=0;while(number=100)break;System.out.println(Thenumberis+number);System.out.println(Thesumis+sum);1/13/202323Java 程序设计publicclassch0306publicstaticvoidmain(Stringargs)intsum=0;in
20、tnumber=0;while(number20)number+;if(number=10|number=11)continue;sum+=number;System.out.println(Thesumis+sum);1/13/202324Java 程序设计publicclassch0307publicstaticvoidmain(Stringargs)System.out.println(21世纪的前十个闰年是世纪的前十个闰年是:);intn=1;for(intyear=2000;year3000;year+=4)if(year%100=0&year%400!=0)continue;if(
21、n10)System.out.print(year+,);n+;elseSystem.out.println(year);break;1/13/202325Java 程序设计3.5常见问题的求解常见问题的求解 任何可计算性问题的解决过程,都可以转任何可计算性问题的解决过程,都可以转化为按指定顺序执行的一系列操作。通过确定化为按指定顺序执行的一系列操作。通过确定要执行的操作,并安排操作执行的次序来解决要执行的操作,并安排操作执行的次序来解决问题的步骤称为算法。程序流程图、伪码可以问题的步骤称为算法。程序流程图、伪码可以帮助程序员,在用某种编程语言编写程序之前帮助程序员,在用某种编程语言编写程序之
22、前开发算法,更好地开发算法,更好地“思考思考”程序总体结构。算程序总体结构。算法本身与编程语言无关,语言只是实现算法的法本身与编程语言无关,语言只是实现算法的工具。工具。1/13/202326Java 程序设计3.5.1 迭代算法迭代算法迭迭代代就就是是不不断断由由已已知知值值推推出出新新值值,直直到到求求解解为为止止。显显然然,迭迭代代算算法法是是利利用用计计算算机机的的高高速速运运算算能能力力和和循循环环程程序序来来实实现现。一一般般来来说说迭迭代代由由3个个环节组成:环节组成:l l迭代初始值;迭代初始值;l l迭代公式;迭代公式;迭代终止条件。迭代终止条件。1/13/202327Jav
23、a 程序设计classch0309publicstaticvoidmain(Stringargs)floatt=1,s=0;/迭代初始值迭代初始值for(inti=0;i64;i+)s+=t;/迭代计算公式迭代计算公式t*=2;/迭代计算公式迭代计算公式System.out.println(sum=+s+t263=+t/2);1/13/202328Java 程序设计3.5.2 穷举算法穷举算法穷穷举举也也称称枚枚举举,是是最最常常用用的的算算法法之之一一,它它的的基基本本思思想想是是一一一一列列举举各各种种可可能能进进行行的的测测试试,从从中中找找出出符符合合条条件件的的解解。计计算算机机能能
24、够够实实现现高高速速运运算算,是是由由于于它它借借助助于于循循环环结结构构实实现现穷穷举举,它它比比人工操作更为有效。人工操作更为有效。尽管计算机可以实现高速运算,但设计穷尽管计算机可以实现高速运算,但设计穷举算法时,仍希望尽量缩小穷举的规模。或者举算法时,仍希望尽量缩小穷举的规模。或者说,在保证思路严密,清晰,有条理,不漏掉说,在保证思路严密,清晰,有条理,不漏掉解的前提下,尽量减小穷举的规模。解的前提下,尽量减小穷举的规模。1/13/202329Java 程序设计classch0311publicstaticvoidmain(Stringargs)System.out.println(百百
25、、十十、个个位位数数的的立立方方和和就就是是该该三三位位数数:);for(inti=1;i9;i+)for(intj=0;j9;j+)for(intk=0;k9;k+)ints=i*100+j*10+k;if(i*i*i+j*j*j+k*k*k=s)System.out.println(i=+i+,j=+j+,k=+k+,s=+s);1/13/202330Java 程序设计3.5.3 复杂程序解决方案和方法复杂程序解决方案和方法 随着要求编程解决的问题复杂程度的增加,随着要求编程解决的问题复杂程度的增加,面向对象程序设计应运而生。面向对象程序设面向对象程序设计应运而生。面向对象程序设计方法,首
26、先是使用计方法,首先是使用“分而治之分而治之”的方法,使的方法,使得程序的开发更好管理,然后利用程序的重用得程序的开发更好管理,然后利用程序的重用性,可以将已有的程序作为构件创建新的程序性,可以将已有的程序作为构件创建新的程序,提高程序的可靠性,提高软件开发的效率。,提高程序的可靠性,提高软件开发的效率。1.类的方法成员类的方法成员Java是纯面向对象程序设计语言,方法是类的是纯面向对象程序设计语言,方法是类的成员之一。类的方法和成员之一。类的方法和C语言的函数十分相似,语言的函数十分相似,但方法的定义和调用都遵循面向对象的规则。但方法的定义和调用都遵循面向对象的规则。1/13/202331J
27、ava 程序设计2.方法的调用方法的调用按按方方法法的的定定义义可可分分成成:实实例例方方法法、静静态态(类类)方法和主类方法。方法和主类方法。实例方法是类的成员方法,必须在实例化后实例方法是类的成员方法,必须在实例化后才能调用,并由类的实例(对象)冠名调用,才能调用,并由类的实例(对象)冠名调用,称给对象发消息。实例方法能对该类中的实例称给对象发消息。实例方法能对该类中的实例变量进行操作,也可以对类变量进行操作。变量进行操作,也可以对类变量进行操作。1/13/202332Java 程序设计3结构化编程结构化编程(SP)解决方案解决方案 在结构化程序设计(在结构化程序设计(Structured
28、 Programming)中,对复杂问题求解采用中,对复杂问题求解采用“分而治之分而治之”,功能模块分解的方法。即将应用,功能模块分解的方法。即将应用程序分解为一系列功能相对独立的模块,主程程序分解为一系列功能相对独立的模块,主程序调用处理模块解决复杂问题。序调用处理模块解决复杂问题。C语言采用函语言采用函数作为模块设计工具,数作为模块设计工具,Java提供模块设计的提供模块设计的工具是方法。工具是方法。1/13/202333Java 程序设计classch0312publicstaticvoidmain(Stringargs)inta=48,b=27,g;g=result(a,b);if(g
29、=-1)System.out.println(+a+和和+b+无最大公约数无最大公约数!);elseSystem.out.println(+a+和和+b+的最大公约数为:的最大公约数为:+g);staticintresult(inta,intb)/辗转相除求最大公约数模块辗转相除求最大公约数模块intu,v,r;u=a;v=b;r=u%v;while(r!=0)System.out.println(u=+u+,v=+v+,r=+r);u=v;v=r;r=u%v;if(v=1)return-1;elsereturnv;1/13/202334Java 程序设计4.内部类(内部类(internal
30、class)解决方案解决方案 在类中定义的类称内部类或称被包含的类,在类中定义的类称内部类或称被包含的类,内部类与包含类处于同一程序文件中,它能共内部类与包含类处于同一程序文件中,它能共享包含类的成员,结构清晰、紧凑。如果包含享包含类的成员,结构清晰、紧凑。如果包含类是应用程序的主类,则它必须是静态类是应用程序的主类,则它必须是静态(static)类,否则编译出错。类,否则编译出错。1/13/202335Java 程序设计classch0314staticinta=48,b=27;publicstaticvoidmain(Stringargs)Zdgyss=newZdgys();System.
31、out.println(+a+和和+b+的的最最大大公公约约数数为为:+s.result();staticclassZdgyspublicintresult()intu,v,r;u=a;v=b;r=u%v;while(r!=0)u=v;v=r;r=u%v;returnv;1/13/202336Java 程序设计5.外部类解决方案外部类解决方案 6.递归算法递归算法 在数学和数据结构中经常见到递归定义,在数学和数据结构中经常见到递归定义,递归就是递归就是“自己自己”直接或间接地定义或调用直接或间接地定义或调用“自己自己”,或,或“自己自己”由由“自己自己”部分地组成部分地组成。1/13/2023
32、37Java 程序设计classfactor/求求n阶阶乘乘的的外外部部服务类服务类publiclongfactorial(longn)if(n=1)return1;/递归终止条件递归终止条件elsereturnn*factorial(n-1);/递归算法递归算法publicclassch0316publicstaticvoidmain(Stringargs)longn=20l;factora=newfactor();longresult=a.factorial(n);System.out.println(+n+的阶乘结果为:的阶乘结果为:+result);1/13/202338Java 程序设计