12010年Java语言第3讲Java语言基础李明2流程控制数组字符串主要内容3流程控制4流程控制知识框架图5流程控制知识框架图6顺序结构7双分支结构8双分支结构双分支结构的基本格式为:if(条件){单语句或语句块;}[else{单语句或语句块;}]程序8-1ComparisonIf.java程序8-2ComparisonIfElse.java程序8-3ComparisonIfElse2.java程序8-4ComparisonIfElse3.java9多分支结构10多分支结构switch(表达式){case值1:语句1;break;case值2:语句2;break;……case值n:语句n;break;[default:语句]}程序8-5GradeCheck.java程序8-6ComputeDays.java11一个循环结构一般都由4部分组成。(1)初始化部分:用来定义或确定循环变量并给循环变量赋初值。(2)判断部分:判断要不要进入循环,一般是一个关系表达式或逻辑表达式,其值用来判断是否满足循环的终止条件。每一次循环都要判断终止条件。(3)循环体部分:这是反复执行的一段代码,可以是单语句,也可以是代码块。(4)迭代部分:用来改变循环变量的值,并逐步满足循环终止条件。循环的一般结构12for循环for(初始化部分;判断部分;迭代部分){循环体部分;}程序8-7Sum100ByFor.java13while循环初始化部分while(判断部分){循环体部分;迭代部分;}程序8-8Sum100ByWhile.java14do-while循环初始化部分do{循环体部分;迭代部分;}while(判断部分);程序8-9Sum100ByDoWhile.java15流程跳转语句break语句程序8-10IllustrateBreak.javacontinue语句程序8-11IllustrateContinue.java标号语句16流程控制程序实例编写一个程序,打印如下菜单:====================1.新增2.修改3.删除4.查询5.退出====================程序8-12PrintMenu.java17算法一:穷举算法穷举算法也叫“枚举算法”,基本思想是将所有可能的解都列举出来,如果解空间不是很精确,则需要用条件进行过滤,符合条件的解,即为正确的结果。如果解空间找的非常精确,则可以直接列举出来。18算法一:穷举算法例1:5个同学去照相,每张相片上3个人,问有多少张不同的相片?(只要是相同的3个人,不管位置如何,都算一张)。程序8-13QiongJu_ZhaoXiang.java例2:小明去买菜,青菜1.2元/斤,黄瓜2元/斤,西红柿2.8元/斤,小明共有12元,全部花完且每种菜至少要买1斤,问小明共有多少种买法。程序8-14QiongJu_MaiCai.java19算法二:递推算法递推算法就是按照一定的规律,递推或迭代一定的次数,从而得到结果的一种算法。20算法二:递推算法例1:某公司2000年的产值为100万元,该公司计划产值以每年10%的速度递增,问2010年该公司的产值是多少?程序8-15DiTui1.java例2:有如下数列:1,1,2,3,5,8,13,…请问第20项是多少?程序8-16DiTui2.java21算法三:递归算法递归就是把方法不断地自我调用,直到满足一定的条件后,再逐层返回的算法。递归在解决某些问题时,可以使某些看起来不易解决的问题容易解决,写出的程序较简短。但是递归也有自身的缺点,就是内存开销太大。22算法三:递归算法例1:计算N!程序8-17DiGui1.java例2:用递归算法计算100之内的偶数和。程序8-18DiGui2.java23项目第一种写法开始编写一个学生成绩管理信息系统,需求如下。功能需求:增加学生、删除学生、修改成绩、查询成绩、打印成绩。本程序要求将功能以菜单形式打印出来。程序8-19StudentMIS11.java24作业第一次作业:完成教材上第八章的作业。25数组26数组知识框架图27数组知识框架图28数组的含义及其作用数组就是一组相同类型的数据,数组中的每个成员相当于一个变量,各有不同的内存地址,但内存地址连续,所以一个数组可以看成一个整体或一整块内存区。数组的作用就是将多个相同类型的变量形成一个整体,可以存放多个数据,并作为整体来使用。数组可以分为一维数组、二维数组、多维数组。29一维数组的定义格式一:类型数组名称[];数组名称=new类型[n];格式二:类型[]数组名称;数组名称=new类型[n];格式三:类型数组名称[]=new类型[n];格式四:类型数组名称[]={值1,值2,值3,…};程序9-1Array1Defined.java30二维数组的定义格式一:类型数组名称[][];数组名称=new类型[n][m];格式二:类型[]数组名称[];数组名称=new类型[n][m];格式三:类型[][]数组名称;数组名称=new类型[n][m];格式四:类型数组名称[][]=new类型[n][m];格式五:类型数组名称[][]={{值11,值12,值13,…},{值21,值22,值23,…},…};程序9-2Array2Defined.java31数组的应用一维数组的赋值:数组名称[i]=值;一维数组的取值:变量=数组名称[i];程序9-3Array1Applied.java二维数组的赋值:数组名称[i][j]=值;二维数组的取值:变量=数组名称[i][j];程序9-4Array2Applied.java32数组应用实例随机产生10个100之内的整数,去掉一个最大值,再去掉一个最小值,剩下的计算平均值,最后四舍五入成整数输出。程序9-5Average.java33算法四:图形打印-基本图形打印程序9-6PrintStar1.java程序9-7PrintStar2.java程序9-8PrintStar3.java程序9-9PrintStar4.java34算法四:图形打印-复杂图形打印程序9-10PrintStar5.java程序9-11PrintStar6.java35算法四:图形打印-用递归算法打印图形用递归算法打印①号图形程序9-12PrintStar1ByDiGui.java用递归算法打印⑤号图形程序9-13PrintStar5ByDiGui.java36算法五:数组排序算法37交换排序交换排序的基本思想是按照事先设定的顺序(从小到大或从大到小),两两比较待排序的数,发现两个数的次序相反时即进行交换,直到没有反序的数为止。常见的交换排序算法有冒泡排序和快速排序。38冒泡排序以从小到大排序为例,将相邻的两个数加以比较,若左边的值大于右边的值,则将此两个值的位置交换。右边的值继续和下一个值作比较,重复此操作,直到比较到最后一个值。此方法在每比较一趟就会以交换位置的方式将该趟的最大者移向数组的尾端,就像气泡从水底浮向水面一样,到水面时气泡最大,故称为冒泡排序法。程序9-14BubbleSort.java39快速排序快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法,目前速度最快。分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。程序9-15QuickSort.java40选择排序选择排序的基本思想是从一组无序的数中选择一个符合条件的数,并按照事先设定的顺序(从小到大或从大到小)排列,直到没有数可选为止。常见的选择排序算法有直接选择排序和堆排序。41直接选择排序在欲排序的n个数据中,以线性查找的方式找出最小(大)的元素和第一个元素交换,再从剩下的(n-1)个数据中,找出最小(大)的元素和第二个元素交换,以此类推,直到所有元素均已排序完成。程序9-16SelectionSort.java42堆排序n个关键字序列Kl,K2,…,Kn称为堆,当且仅当该序列满足如下性质(简称为堆性质):ki≤K2i且ki≤K2i+1或Ki≥K2i且ki≥K2i+1(1≤i≤n)。若将此序列所存储的向量R[1..n]看作是一棵完全二叉树的存储结构,则堆实质上是满足如下性质的完全二叉树:树中任一非叶节点的关键字均不大于(或不小于)其左右孩子(若存在)节点的关键字。程序9-17HeapSort.java43插入排序插入排序的基本思想是每次将一个待排序的数据,按其大小插入到前面已经排好序的子序列中的适当位置,直到全部数据插入完成为止。常见的插入排序算法有直接插入排序和希尔排序。44直接插入排序接插入排序与打扑克时整理手上的牌非常类似。摸来的第1张牌无须整理,此后每次从桌上的牌(无序区)中摸最上面的1张并插入左手的牌(有序区)中正确的位置上。为了找到这个正确的位置,须自左向右(或自右向左)将摸来的牌与左手中已有的牌逐一比较。直到所有元素均已排序完成。程序9-18InsertionSort.java45希尔排序希尔排序(ShellSort)是插入排序的一种。因D.L.Shell于1959年提出而得名。希尔排序的基本思想是先取一个小于n的整数d1作为第一个增量,把待排序的数据分成d1个组。所有距离为dl的倍数的数据放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2d1重复上述的分组和排序,直至所取的增量dt=1(dtdt-l…d2d1),即所有数据放在同一组中进行直接插入排序为止。该方法实质上是一种分组插入方法。程序9-19ShellSort.java46归并排序归并排序算法的基本思想是将A、B两个相同顺序的有序序列存储在同一数组中,为了减少数据移动次数,可以采用一个临时工作数组C,将排序结果暂时保存在C数组中,等归并结束后,C数组就是排序结果。程序9-20MergerSort.java47算法六:回溯算法回溯算法的基本思想是路径搜索,是一种组织的井井有条、能避免不必要搜索的穷举式搜索算法。它适用于解一些组合数相当大的问题。48算法六:回溯算法例1:有一迷宫,可用一个10行9列的0-1矩阵表示,其中0代表无障碍,1代表有障碍。设入口位置的坐标为(2,0),出口为(9,9),规定每次移动只能从一个无障碍的单元移到其周围四个方向上任一无障碍的单元。试编程给出通过迷宫的一条路径或报告一个“无法通过”的信息。49程序9-21HuiSu.java50项目第一种写法完成编写一个学生成绩管理信息系统,需求如下。数据需求:学号、姓名、性别、成绩。功能需求:增加学生、删除学生、修改成绩、查询成绩、打印成绩。程序9-22StudentMIS12.java51作业第二次作业:完成教材上第九章的作业。52字符串53字符串知识框架图54Java中的字符串字符串就是由字符组成的序列。Java语言中的字符串分为定长字符串和可变字符串。55定长字符串定长字符串是指字符串对象创建后其值将不可改变,但是可以通过修改原字符串来创建新的定长字符串,即对定长字符串的操作会产生一个新的字符串。定长字符串的操作封装在String类中。String类的常用方法。56可变字符串可变字符串是指字符串对象创建后其值可以改变,而且修改后不会创建新的字符串。可变字符串的实质是一块可操作的内存区,可以对该内存区中存放的字符进行操作,所以可以改变其值和长度。可变字符串的操作封装在StringBuffer类中。StringBuffer类的常用方法。57字符串应用实例字符串反序程序10-1ReverseString1.java程序10-2ReverseString2.java分离字符串中的字符程序10-3SeparateString.java身份证验证程序10-4CheckIDNumber.java电子邮箱验证程序10-5CheckEmailAddr.java统计英文句子中单词的个数程序10-6CountWords.java程序自动生成关键字段程序10-7CreateICKSt