版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JAVA前九章复习教案(多态、抽象之前)0902:张坤朋第1讲 Java概述及入门为什么学习Java我们知道了什么是程序,作为软件工程师,我们的工作就是编写程序。计算机就是一台机器,它不可能懂人类的语言,所以我们要学习一种计算机能懂的语言,就像要和说英语的交流,我们就要学习英语,要和说法语的人交流,就要学习法语,所以我们要做软件工程师,和计算机打交道,就要学习计算机语言。JAVA就是我们专门要学习的高级计算机语言,学好这门语言将为以后的学习打下良好的基础,为以后的工作铺平道路。Java是SunMicrosystems于1995年推出的高级编程语言。Java领域的JavaSE、JavaEE、JavaME技术已发展成为同C#和.NET平分天下的应用软件开发平台和技术现在JavaME更是3G软件技术的前沿Java可以做什么开发桌面应用程序(C/S结构)银行软件、商场结算软件C/S结构是指:必须在客户机(自己用的电脑)上安装程序后才能使用的程序结构,比如常用的腾讯QQ软件,必须安装后才能使用。开发面向Internet的应用程序(B/S结构)网上数码商城、阿里巴巴、易趣网B/S结构是指:只要用浏览器就能使用的程序,比如各种网站:网易、淘宝网、新华网等开发手机等移动设备程序JavaME手机QQ、移动飞信Java技术平台JavaSE:(Java平台标准版)主要用来开发C/S结构的程序JavaEE:(Java平台企业版)主要用来开发B/S结构的程序JavaME:(Java嵌入式系统)主要用来开发手机、机顶盒之类的小型程序Java2Card:JAVA智能卡:主要用于智能终端设备的智能卡片Java的特点简单——Java设计人员删除了C++中许多复杂的功能,如指针操纵和运算符重载等纯面向对象——在Java中任何东西都是对象。因此,重点集中在数据、应用程序中操作对象的方法以及过程上健壮性——Java在编译和解释时都会检查代码安全性——Java提供了用于执行程序的受控环境,以及多层次的安全控制分布式——Java可用于开发能够在多个平台、操作系统和图形用户界面之间移植的应用程序多线程——Java程序使用称为“多线程”的进程同时处理多项任务平台无关性——Java使用解释器来执行代码,所以可以实现“一次编写,到处运行”Java是一种可跨平台的计算机语言Java的源代码和字节码是与机器无关的,字节码运行在JVM中JVM(JAVA虚拟机)是与机器相关的(JavaVirtualMachine)装有不同操作系统的机器上,需要有专门为该操作系统开发的JVMJava虚拟机(JVM)可运行Java字节码的虚拟计算机系统它有一个解释器组件,可以实现Java字节码和计算机操作系统之间的通信在编写好JAVA应用程序后,将JAVA应用程序编译成字节码程序。字节码程序可以在任何安装好JAVA虚拟机(JVM)的操作系统之中运行。Java虚拟机的运行过程源代码将被编译生成字节码文件字节码文件在JVM中运行,通过类加载器加载到内存中,然后在字节码校验器中进行字节码的校验,如果正确无误,就通过JVM的解释器和JIT代码生成器通知硬件设备执行程序。常见的java误解误解一:JAVA是HTML的扩展误解二:JAVA是非常容易学习的编程语言误解三:JAVA提供了一个非常容易编程的环境误解四:JAVA会变成通用于任一平台的统一语言误解五:现在有了C#,Java过时了误解六:JavaScript是Java的简易版本误解七:Java有专利,应该避免使用误解八:所有的Java程序都是在网页中运行的Java的开发环境JDK是有助于程序员开发Java程序的Java开发工具包jdk-6u1-windows-i586-p了解安装目录:bin目录:存放可执行文件;lib目录:存放Java的类库文件;include目录:存放用于本地方法的文件;demo目录:存放演示程序;jre目录:存放Java运行环境文件;配置环境变量用右键单击“我的电脑”,查看“属性”,在“高级”选项卡中点击下方的“环境变量”按钮,在环境变量中进行如下设置:在系统变量(下面的框)中新建如下变量:“=”左边的是变量名,右边的是变量值:JAVA_HOME=D:\ProgramFiles\Java\jdk1.6.0找到变量中已经存在的PATH变量,双击修改,PATH的最后加上;D:\ProgramFiles\Java\jdk1.6.0注意:在这个示例中:D:\ProgramFiles\Java\jdk1.6.0为JDK安装目录,如果JDK安装在其他目录,请相应修改小结什么是程序JAVA语言的版本划分JAVA虚拟机的运行机制环境变量的配置知识点3:开发第一个Java程序[50分钟]三步走编写源程序分析问题后编写源代码:将解决问题的指令用JAVA语言描述出来分析问题如何解决分析解决问题过程中要用到哪些代码结构分析这些代码的执行顺序用JAVA语言写出相应代码编译源程序将源代码转换成字节码,JAVA运行环境会将字节码转换成机器码这个过程可由工具自动完成,这个过程是必不可少的运行JAVA入口程序框架外层框架Java程序框架JAVA入口程序框架外层框架语法:publicclassHelloWorld{ publicstaticvoidmain(String[]args){ //这里填写代码填写代码 }填写代码}类的框架:必须以public开头,全部都是小写在类名的前面一定要有class关键字类名不要使用中文不要使用特殊字符要用大写字母开头要有一定的意义,能表示这个程序要做什么事情类名后面一定有一对大括号,所有要执行的代码都在这对大括号中main方法四要素方法必须public开头,全部都是小写main方法中一定有static关键字,这个关键字紧跟在public关键字后面在方法名main的前面一定要使用void关键字在方法名main的后面一定用(String[]args)结束最后要有一对大括号,代码就写在大括号中用Eclipse开发Java程序的步骤打开“MyEclipse”工具:在桌面上双击工具的图标:可能是5.5或是6.0或是更高版本,这只是版本的不同,功能基本一致(版本越高,功能越强)出现以下窗口,用于选择工作空间——即:我们创建的JAVA程序放在电脑中的什么目录中(正确选择相应目录会让我们很容易找到我们编写的程序)可以点击“Browse...”(浏览),以改变保存的位置,使自己编写的JAVA程序放在自己创建的目录中一般在D盘或E盘创建一个目录作为工作空间可以选中下面的复选框,以便下次不再询问然后点击“确定”,即可打开“MyEclipse”工具创建一个Java项目点击“File”(文件)“New”(新建)“Project”(项目):出现以下界面(新建项目界面)选择“选择“Java项目”点击“Next”(下一步),出现界面:给项目起名字给项目起名字给项目起一个名字:在这里我给项目起的名字是:JAVADemoT1点击“Finish”(完成),项目就新建好了。手动创建Java源程序双击项目的名字或点击项目名称前面的“+”:JAVADemoT1,以展开项目,展开项目后用右键单击“src”目录如果在上面的界面中没有看到src目录(源文件夹),可以自己创建源文件夹,方法如下:右键点击项目的名字,在弹出的对话框中选择“New”(新建)“SourceFolder”(源文件夹,一定要创建源文件夹,不是文件夹),然后在弹出的对话框中填入一个文件夹名(src)即可。如下图所示:出现菜单后,选择“New”(新建)“File”(文件),出现以下界面:一定要在源文件夹中创建新的文件这里给文件起名字这里要选择“src这里给文件起名字这里要选择“src”我在这里给文件起名:HelloWorld.java文件名第一个字母要大写文件名应该是英文,不要使用中文文件名后面创建的类的类名要和文件名完全一样文件名一定要以“.java”结尾(后缀、扩展名)编写代码按照规范编写代码:代码的编写会在以后的课程中详细学习,本讲主要在控制台中输出相应文字。编译Java源程序这个过程在默认情况下是自动的:“自动构建“自动构建”被钩选如果“自动构建”没有钩选,则需要手工编译:选择“构建项目”即可用右键选中要构建的项目,在弹出的菜单中选择“BuildProject”(构建项目)即可实现手工编译运行程序选中要运行的JAVA程序,点击右键,选择“RunAs”(运行方式)选择“JavaApplication”(Java应用程序)运行程序即可运行我们编写的代码类名与文件名完全一样类名与文件名完全一样main方法是Java程序执行的入口点第一个JAVA程序main方法是Java程序执行的入口点关键字高亮显示publicclassHelloWorld{关键字高亮显示{和}一一对应,缺一不可 publicstaticvoidmain(String[]args){{和}一一对应,缺一不可 System.out.println("你好!中兴3G!");从控制台输出信息 }从控制台输出信息main方法四要素必不可少}main方法四要素必不可少System.out.println();输出内容时,会在输出后换行如果不想换行,可以使用System.out.print();使用“\n”可以实现在输出中换行使用“\t”可以实现输出一个制表位(一般是8个空格)Java编码规范编码一定要规范,这样才能少出错误,提高得就快。去掉public,程序可以运行,但不规范;规范要求类名必须使用public修饰public修饰的类的名称必须与Java文件同名public修饰的类的名称必须与Java文件同名main方法作为程序入口,void必不可少Java对大小写敏感每一条Java语句必须以分号结束注意:不要漏写引号Java项目组织结构PackageExplorer——包资源管理器用包组织Java源文件,类似于文件夹选择菜单“Windows”(窗口)“ShowView”(显示视图)“PackageExplorer”(包资源管理器)即可打开包资源管理器包资源管理器JRE系统库目录:存放程序运行必须的系统库文件包资源管理器JRE系统库目录:存放程序运行必须的系统库文件Navigator——导航器选择菜单“Windows”(窗口)“ShowView”(显示视图)“Navigator”(导航器)即可打开导航器导航器classes目录:存放可执行的字节码文件src目录:存放Java源文件导航器classes目录:存放可执行的字节码文件src目录:存放Java源文件注意:.classpath和.project文件是工程的配置文件,不要动它们。Java程序的注释我们编写的程序不仅仅是给自己看的,有时也需要让别人改进,所以需要对写过的代码进行注释,就是自己看的代码,也需要进行注释,要不然,过一段时间后,就不知道自己写的代码是什么意思,是做什么用的。要分析很久才能知道。浪费了时间。所以我们要从现在开始养成写注释的好习惯多行注释以/*开始,以*/结束代码示例:/**HelloWorld.java*2010-5-*第一个Java程序*/publicclassHelloWorld{publicstaticvoidmain(String[]args){System.out.println(“你好!中兴3G!");}}单行注释以//开始,以行末结束代码示例:publicclassHelloWorld{publicstaticvoidmain(String[]args){//输出消息到控制台System.out.println(“你好!中兴3G!");}}JavaAPI文档这是一个JAVA程序的帮助文档可以用于查询所有的JAVA所提供的各种功能的格式和用法小结JAVA程序的开发步骤有哪几步?编写JAVA程序时,要注意哪些问题JAVA程序中的注释已经学习了哪两种,格式分别是什么?总结[5分钟]考核点什么是计算机程序?Java相关的技术有哪些?Java可以编写哪两类程序?Java程序的基本框架是什么?使用Eclipse开发Java程序的步骤是什么?如何在控制台输出一条信息?第2讲JAVA标识符、关键字和类型——变量、数据类型和运算符变量命名规则在生活中,我们给各种事物命名要符合一些规范,比如我们给人起名字,就要符合公安部的规定,要不然就不给上户口。在Java语言中,变量命名同样要符合一定规则如:money,score,name,sex变量命名规则:简短且能清楚地表明变量的作用,通常第一个单词的首字母小写,其后单词的首字母大写。例如:myScore小结:命名规范首字母小写不能用数字开头,只能用字母或“_”及“$”开头只能包含字母、数字、“_”及“$”不能有相同的变量名不能用JAVA语言的关键字作为变量名关键字:在JAVA语言中有特殊意义的单词在Eclipse工具中会改变颜色的单词常见错误:没有为声明的变量赋值就使用:先声明变量并赋值,然后才能使用变量名不能以“%”开始:要记住命名规范声明两个同名变量导致编译错误:不能有相同的变量名变量小结:定义变量有哪两种方式?声明的同时赋值先声明,然后在使用之前赋值使用变量存储以下MP3信息,并打印输出品牌(brand):爱国者F928重量(weight):12.4电池类型(type):内置锂电池价格(price):499publicclassMP3{publicstaticvoidmain(String[]args){Stringbrand="爱国者F928"; //品牌doubleweight=12.4; //重量Stringtype="内置锂电池"; //电池类型intprice=499; //价格System.out.println("品牌:"+brand);System.out.println("重量:"+weight);System.out.println("电池类型:"+type);System.out.println("价格:"+price); }}第3讲--流程控制(条件结构)boolean类型我们上次课程主要学习了int、double、char、String四种数据类型,在现实生活中除了要表示整数、小数、字符、字符串外,还有一些其他的情况:一件商品的真与假,钱的真与假,我们在JAVA中用什么来描述呢。这就是今天要学习的新的数据类型:boolean数据类型作用:boolean类型是用来描述真与假的数据类型一件商品是真货还是假货一个条件成立还是不成立,成立就是真,不成立就是假boolean(布尔)类型boolean类型的值:真:true假:false特点:boolean类型的值只有上面列出的两个使用:用boolean类型描述:学员张三的考试成绩是否比学员李四(80分)高publicclassJAVAT2Demo{ publicstaticvoidmain(String[]args){ //声明两个变量,分别存放张三和李四的成绩 intlisi=80; intzhangsan=70; //声明一个boolean类型的变量,存放比较的结果 booleanisBig; //获取比较的结果 isBig=zhangsan>lisi; //输出比较的结果 System.out.println("张三成绩比李四高吗?"+isBig); }}总结:我们使用boolean数据类型来表示真和假逻辑运算符懒羊羊不仅仅学习了JAVA,还学习了音乐,如果他的JAVA成绩大于90分,并且音乐成绩大于80分,村长才就奖励他;或者JAVA成绩100分,并且音乐成绩大于70,村长也奖励他。我们怎么实现这个功能呢?我们可以使用逻辑运算符作用:用于连接条件表达式代码示例:条件编写:(score1>90&&score2>80)||(score1==100&&score2>70)运算符的优先级:最高的优先级:小括号,即()最低的优先级:赋值运算符,即=优先级顺序:!>算术运算符>比较运算符>&&>||多使用小括号()控制优先级完整代码:publicclassHelloWorld03{ publicstaticvoidmain(String[]args){ intscore1=100;//懒羊羊的Java成绩 intscore2=72;//懒羊羊的音乐成绩 if((score1>90&&score2>80)||(score1==100&&score2>70)){ System.out.println("村长说:不错,你可以休息三天"); } }}总结:if条件结构是先判断再执行逻辑运算符可以连接多个条件表达式小结1说出已学过的数据类型有哪些?int、double、char、boolean、String举例说明已学过的运算符有哪些?赋值运算符、算术运算符、关系运算符、逻辑运算符if和if-else条件结构执行的顺序是什么?if:如果条件表达式成立,执行语句if-else:如果条件表达式成立,执行语句1,如果不成立,执行语句2示例:小布什买了一筐鸡蛋,如果坏鸡蛋少于5个,他就吃掉,否则他就去退货publicclassXiaoJie1_1{ publicstaticvoidmain(String[]args){ intbadegg=6; if(badegg<5){ System.out.println("坏蛋少于5个,吃掉其余的!"); }else{ System.out.println("坏蛋大于等于5个,全部退掉!"); } }}用户有两个整数a、b,如果a能被b整除或a加b大于100,则输出a,否则输出bpublicclassXiaoJie1_2{ publicstaticvoidmain(String[]args){ inta=40; intb=70; if(a%b==0||(a+b)>100){ System.out.println("a的值是:"+a); }else{ System.out.println("b的值是:"+b); } }}三元运算符语法:x?y:z;其中y和z的数据类型必须是相互兼容的如都是int(整型)或String(字符串类型)其中x为boolean类型表达式,先计算x的值,若为true,则整个表达式的结果为表达式y的值,否则为表达式z的值。三元条件运算符相当于简单的if…else…语句示例: intscore=80; intx=100; Stringtype=score<60?"不及格":"及格" intflag=x>0?1:(x==0?0:-1); doublenum=3>5?9.9:8;最后一条语句就相当于:doublenum;if(3>5){num=9.9;}else{ num=8;}案例:对学生的考试成绩进行判断 成绩>=60:及格成绩<60:不及格代码:publicclassHelloWorld12{ publicstaticvoidmain(String[]args){ intscore=69; Stringresult=score<60?"不及格":"及格"; System.out.println("张三的成绩是:"+result); }}小结条件结构分为以下三种情况使用if条件结构if…else…结构if…elseif…结构switch结构[20分钟]switch结构的使用问题:懒羊羊参加跳水大赛如果获得第一名,将出任班长如果获得第二名,将出任大队长如果获得第三名,将出任小组长否则,将留级可以使用if条件结构实现publicclassHelloWorld08{ publicstaticvoidmain(String[]args){ intmingCi=3;//名次 if(mingCi==1){ System.out.println("出任班长"); }elseif(mingCi==2){ System.out.println("出任大队长"); }elseif(mingCi==3){ System.out.println("出任小组长"); }else{ System.out.println("留级"); } }}更好的解决办法:使用switch结构解决作用:用来解决多个固定的值的判断语法:使用switch结构解决问题完整代码:publicclassHelloWorld09{publicstaticvoidmain(String[]args){intmingCi=1;//名次switch(mingCi){case1: System.out.println("出任班长");break;case2: System.out.println("出任大队长");break;case3: System.out.println("出任小组长");break;default: System.out.println("留级"); break;}}}总结:每一个case必须由break结束case后面的常量必须各不相同switch后面小括号中表达式的值必须是整型或字符型比较switch结构和多重if结构相同点:都可以实现多分支结构不同点:switch:只能处理等值的条件判断,且条件是整型变量或字符变量的等值判断多重if:处理在else部分还包含其它if结构,特别适合某个变量处于某个区间时的情况总结根据赵本山的考试成绩,显示所获奖励成绩==100分,爸爸给他买辆车成绩>=90分,妈妈给他买MP490分>成绩>=60分,妈妈给他买本参考书成绩<60分,什么都不买publicclassScoreTest{ publicstaticvoidmain(String[]args){ intscore=95;//成绩 if(score==100){ System.out.println("他爸爸给他买辆车"); }elseif(score>=90){ System.out.println("他妈妈给他买MP4"); }elseif(score<90&&score>=60){ System.out.println("他妈妈给他买本参考书"); }else{ System.out.println("什么都不买"); } }}张三为他的手机设定了自动拨号按1:拨爸爸的号按2:拨妈妈的号按3:拨爷爷的号按4:拨奶奶的号编程实现此业务:publicclassDial{ publicstaticvoidmain(String[]args){ intno=1; switch(no){ case1: System.out.println("拨爸爸的号"); break; case2: System.out.println("拨妈妈的号"); break; case3: System.out.println("拨爷爷的号"); break; case4: System.out.println("拨奶奶的号"); break; default: break; } }}注意事项case后面的值只能是字符或者整型;case每个值不能相同;switch语句不能判断某个范围,如果要判断某个范围需使用if语句;case和default子句的先后顺序可以变换,不会影响程序的执行结果;default子句可以省略;case语句后如果没有break,则结果可能不准确。总结[10分钟]考核点什么数据类型可以描述真和假?描述几种分支结构的语法和执行过程?什么情况下会使用多重if条件结构?多重if条件结构和switch结构的区别和适用场合是什么?第4讲--流程控制(循环结构1)回顾:要注意的要点:break关键字不是必须的,但是如果没有,当前匹配的case不会结束,会继续执行,直到遇到break为止。或者执行完所有的语句。才结束switch结构。default块也不是必须的。可以没有。如果没有,当没有case可以匹配时,就什么也不做(没有可执行的代码)if…else…语句:条件成立时,执行if语句块;条件不成立时,执行else语句块键盘输入[15分钟]功能实现在类(publicclassxxx{……}这些代码)的前面输入:importjava.util.*;或者importjava.util.Scanner;在需要接受从键盘输入数据的代码处输入:Scannerinput=newScanner(System.in);根据需要接受输入的数据类型利用第二步创建的input的相应方法实现从控制台接收数据;例如:要接受输入一个整型的数据,代码这样写:intnumber=input.nextInt();要接受输入一个String类型的数据,代码这样写:Stringname=input.next();接受double类型的数据,代码:doubleprice=input.nextDouble();这样就把你从键盘输入的数据保存到声明的变量里了一般在接受输入代码的前面提醒用户输入,即在这句代码前加 :System.out.println(“请输入一个整数”);示例:请输入一个整数,实现一个数字加密器,加密规则是:加密结果=(整数*10+5)/2+3.14159加密结果仍为一整数完整代码:importjava.util.*;publicclassScannerInput{ /** *作者:钟慧涛*日期:2010–7–18*功能描述:输入一个整数,实现加密 */ publicstaticvoidmain(String[]args){ intnum; System.out.println("请输入一个整数,便于实现加密"); //从控制台接收一个数 Scannerinput=newScanner(System.in); //用nextInt()方法获取控制台输入的一个整数 num=input.nextInt(); //通过加密公式得出结果 intresult=(int)((num*10+5)/2+3.14159); //输出数字及加密后的结果 System.out.println(num+"实现加密后的结果为:"+result); }}while循环语法讲解:关键字while后面的小括号中是循环条件循环条件是一个布尔表达式(条件表达式),它的值为布尔类型“真”或“假”,如i<=100。只有两个值:true和false{}(大括号)中的语句统称为循环操作,又称为循环体。注意:在循环条件的小括号后面是没有分号的,整个语法结构是一个整体,不能分割。注意事项:如果第一次判断循环条件时,循环条件就不满足,循环将不会执行。特点:先判断,再执行总结:while循环在循环条件成立时,执行循环操作,否则就不再执行循环操作。示例4:录入班级人数和学员成绩,计算班级学员的平均成绩分析:循环变量的初始值:从第一个开始输入:inti=1;循环条件:目前录入的成绩数目小于总人数使用i做计数器,每循环一次就递增1,即每输入一个学员成绩就递增1只要i小于等于班级总人数,就继续从控制台接收输入的学员成绩循环操作:录入学生成绩,并累加求和循环变量的改变:每循环一次,人数就要加1:i++(作为循环操作的一部分,写在while循环的大括号里)代码实现:publicclassHelloWorld5{ publicstaticvoidmain(String[]args){ StringclassNo;//班级号 intstuNum;//班级的学生人数 intscore;//学生分数 intsum=0;//学生分数总和 intavg;//学生成绩平均值 System.out.print("请输入班级号:"); Scannerinput=newScanner(System.in); classNo=input.next(); System.out.print("请输入该班级的学员总数:"); stuNum=input.nextInt(); inti=1; while(i<=stuNum){ System.out.print("请输入学号"+i+"的成绩:"); score=input.nextInt();//从键盘接收学生成绩 sum=sum+score; i++; } avg=sum/stuNum; System.out.println("该班级学员的平均成绩为:"+avg); }}示例5:还是吃饺子,不过这次可以随便吃,只不过每吃一个就要问一下,还要不要吃下一个,如果要吃,就再吃一个,就这样循环,直到不想吃才停下来。分析:这次循环的初始条件是什么呢就是第一次回答要吃:“y”,只要回答的是“y”,就可以再吃下一个,如果回答了“n”,当然就不吃了所以我们要在控制台上接收输入的字符串“y”或是“n”我们在前面用input.nextInt()将控制台输入的字符串转换成int类型的数据再赋值给int类型的变量,现在我们要直接得到字符串从控制台获得一个字符串:Stringanswer=input.next();循环条件:要判断回答的是不是“y”,只要回答的是“y”就要吃饺子(继续循环),回答“n”才不吃了(结束循环)比较两个String类型的值是否相等的方法:使用字符串的equals方法equals语法:aString.equals(bString);//比较String类型变量aString是否等于//bString,如果相等,结果为true;如果不相等,结果为false循环操作:当然是吃饺子了吃完饺子后还要再问一下,要不要再吃一个用变量接收控制台输入的回答循环变量的变化:用变量接收控制台输入的回答,如果没有变化:回答“y”,那就要继续循环,如果回答了“n”,就结束循环了(条件不成立了)代码实现:importjava.util.Scanner;publicclassHelloWorld1{ publicstaticvoidmain(String[]args){ Scannerinput=newScanner(System.in); System.out.print("要不要吃饺子:"); Stringanswer=input.next(); while(answer.equals("y")){ System.out.println("吃饺子。"); System.out.print("还吃饺子么?"); answer=input.next(); } }}我们改动一下上面的例子,改变提问的方式:不问要不要吃饺子了,问他吃饱了没有,如果没有,也就是回答“n”,就给他吃饺子,否则就不给他吃了。分析:这里其实只是条件发生的变化:以前是和“y”比较,现在是和“n”比较方法1:把answer.equals("y")中的“y”改成“n”方法2:仍然和“y”比较,可以在比较结束后对结果取反,在前面加个“!”就行了。使用while循环的常见问题永远都不会退出的循环称为死循环:一定要记得循环操作中要有改变循环条件的语句:publicclassHelloWorld{ publicstaticvoidmain(String[]args){ inti=0; while(i<4){ System.out.println("欢迎中兴3G学员"); //这里缺了什么?(应该在这里改变循环条件:i++) } }}注意检查循环次数是否满足需求:如果不满足,要进行相应的修改publicclassHelloWorld{ publicstaticvoidmain(String[]args){ inti=1; while(i<4){//条件应该是:i<5 System.out.println("欢迎中兴3G学员"); i++; } }}注意:如果一开始条件就不满足,while循环一次都不执行publicclassHelloWorld{ publicstaticvoidmain(String[]args){ inti=1; while(i>5){//条件应该是:i<5 System.out.println("欢迎中兴3G学员"); i++; } }}小结2006年培养学员8万人,每年增长25%,请问按此增长速度,到哪一年培训学员人数将达到20万人?分析:循环初始条件:2006年,有8万人循环条件:培训学员人数没有达到20万人循环操作:每次增加25%,并累加求和,还要算出当年是哪一年这里的循环操作里同时也包含了循环变量的改变代码publicclassHelloWorld{ publicstaticvoidmain(String[]args){ intyear=2006;//年份 intstudents=80000;//学生数 while(students<200000){ students=(int)(students*(1+0.25)); year++; System.out.println(year+"年,培训"+students+"人"); } System.out.println(year+"年,年培训人到达20万人"); }}小结:while循环可以解决固定循环次数的问题也可以解决没有固定循环次数的问题,而且主要是用来解决没有固定循环次数的问题while循环是先判断,后执行do-while循环的使用语法分析:以关键字do开头,然后是大括号括起来的循环操作;然后才是while关键字,和紧随的小括号括起来的循环条件。小括号后面以“;”结束。执行顺序:先执行一遍循环操作,然后判断循环条件,如果循环条件满足,循环继续执行,否则退出循环。特点:先执行,再判断代码:importjava.util.Scanner;publicclassDemo004{先执行一遍循环操作 publicstaticvoidmain(String[]args){先执行一遍循环操作 Scannerinput=newScanner(System.in); Stringanswer;循环条件 do{循环条件 System.out.println("吃了一个饺子!"); System.out.print("吃饱了没有?(y/n):"); answer=input.next(); }while(!answer.equals("y")); System.out.println("不吃饺子了!"); }}总结:连续录入学生姓名,输入“q”则系统退出publicclassHelloWorld{ publicstaticvoidmain(String[]args){ Stringname;//姓名 Scannerinput=newScanner(System.in); do{ System.out.print("请输入学生姓名:"); name=input.next();//从控制台接收输入的姓名 }while(!name.equals("q")); System.out.println("程序结束"); }}比较while循环和do-while循环执行次序不同:while循环先判断,再执行;do-while循环先执行一次,再判断。初始情况不满足循环条件时while循环一次都不会执行do-while循环不管任何情况都至少执行一次小结使用do-while实现:输出摄氏温度与华氏温度的对照表,要求它从摄氏温度0度到250度,每隔20度为一项,对照表中的条目不超过10条。转换关系:华氏温度=摄氏温度*9/5.0+32提示:循环操作:计算摄氏温度,并输出对照条目循环条件:条目<=10&&摄氏温度<=250代码:publicclassTempTable{ publicstaticvoidmain(String[]args){ doublef; //华氏 doublec=0; //摄氏 intcount=1; //条目 System.out.println("摄氏温度"+"\t华氏温度"); do{ f=c*9/5.0+32;//转换 System.out.println(c+"\t"+f); c=c+20; count++; }while(count<=10&&c<=250); }}总结[10分钟]考核点如何从控制台接收用户输入的信息?循环结构的特点是什么?循环条件:循环所要满足的条件循环操作:循环结构中反复进行相同的或类似的一系列操作。循环操作要用大括号括起来;循环条件要用小括号括起来,是一个boolean值while循环和do-while循环有什么区别?while循环:先判断,再执行,如果条件不成立,一次也不执行do-while循环:先执行,再判断,不论条件是否成立,最少执行一次第5讲--流程控制(循环结构2)回顾:代码填空:实现整数反转publicclassHuiwen{ publicstaticvoidmain(String[]args){ intval=12345; intr_digit; System.out.print("反转后的整数是:"); while(){ ; ; ; } }}分析:要从最后一位开始得到每一位的数字:方法:数字取10的模(%),也就是余数,得到最后一位数字。然后将这个数字输出到控制台。每次取完最后一位数字后,除以10来得到剩下的数字。循环条件:只要剩下的数字不为0,就循环执行第1、2、3步。应当填写如下内容:while(val!=0){ r_digit=val%10; System.out.print(r_digit); val=val/10;}预习检查:什么时候选用for循环结构?在循环次数固定的情况下一般选用for循环结构for循环结构的基本语法和执行顺序是什么? 初始化循环变量判断循环条件是否成立如果条件成立,执行循环体;条件不成立,结束循环执行完循环体后,对循环变量进行迭加,再次判断循环条件,从第2步开始再执行什么是for循环循环结构分析:循环结构的主要作用是反复执行一段代码,直到设置的条件不再满足。循环结构四个组成部分:⑴初始部分:设置循环的初始状态。比如:我们设置记录循环次数的变量i为0;⑵循环体:重复执行的代码,即输出“我是最棒的!”;⑶迭代部分:下一次循环开始前要执行的部分,在while循环中它作为循环体的一部分。比如:使用“i=i+1;”进行循环次数的累加;⑷循环条件:判断是否继续循环的条件。比如:使用“i<100”判断循环次数是否已经达到100次。结论:在for循环结构中,这几个部分同样必不可少,不然循环就会出现错误。for循环的语法for(表达式1;表达式2;表达式3){ //循环执行的语句}语法讲解:for是这个循环结构的关键字表达式1:是赋值语句功能:循环结构的初始部分,为循环变量赋初值表达式2:条件语句功能:循环结构的循环条件,只有条件为true,循环体才能执行表达式3:赋值语句,通常使用“++”或“--”运算符功能:循环结构的迭代部分,通常用来修改循环变量的值for关键字后面小括号中的3个表达式必须用“;”(分号)隔开。执行顺序:执行初始部分:inti=0;(循环开始时执行一次,以后不再执行);执行循环条件判断:i<100;根据条件判断的结果:如果为true,执行循环操作如果为false,退出循环,后面步骤不再执行执行迭代部分,改变循环变量的值:i++;重复第2、3、4步,依次进行,直到退出for循环结构。for循环特点先判断,后执行循环次数固定(也可以解决循环次数不固定的问题,不过一般用于解决循环次数固定的问题)简洁明了for循环作用解决需要多次执行操作的问题,用于次数固定的循环。提高工作效率和减少代码编写量。for循环使用场合在解决有固定次数的循环问题时,使用for循环结构。for循环结构的使用通过示例来学习如何使用for循环循环录入某学员S1的5门课成绩,计算平均分使用for循环结构的步骤分析循环条件和循环操作套用for语法写出代码检查循环是否能够退出分析:循环次数:5循环条件:循环的次数不足5,继续循环循环操作:录入成绩,计算成绩之和代码:importjava.util.*;/***Demo003.java演示for循环,录入5门课成绩,并计算平均值*/publicclassDemo003{ publicstaticvoidmain(String[]args){初始值:i=0循环条件:i<5循环变量改变:i++ intscore;初始值:i=0循环条件:i<5循环变量改变:i++ intsum=0; //成绩之和 intavg; //平均分 Scannerinput=newScanner(System.in); System.out.print("输入学生姓名:"); Stringname=input.next(); //输入姓名 for(inti=0;i<5;i++){ //循环5次录入5门课成绩 System.out.print("请输入5门功课中第"+(i+1)+"门课的成绩:"); score=input.nextInt();循环操作执行5次 sum=sum+score;循环操作执行5次 } avg=sum/5;//计算平均分 System.out.println(name+"的平均分是:"+avg); }}代码分析:在初始部分:声明循环变量i,并初始化为0,用来记录循环次数在条件判断部分:循环条件:i<5在迭代部分:对循环变量进行迭代:i++在循环操作部分(循环体):要进行的循环操作执行过程:执行初始部分:inti=0判断循环条件:如果为true,执行一次循环体循环体结束后,执行迭代部分:i++再判断循环条件是否成立,如果为true,继续执行循环体直到循环条件变成false,退出循环小结:在for循环结构中:表达式1只执行一次,表达式2和表达式3则可能执行多次,循环体可能多次执行,也可能一次也不执行。for结构的其他形式输出如图所示加法表分析:这是一个根据输入的整数值来输出一张加法表循环初始化:i=0;j=输入值循环条件:i<=输入值循环操作:计算i+j循环变量的改变:i++,j--代码示例:importjava.util.*;/***Demo004.java演示for循环的复杂形式*/publicclassDemo004{ publicstaticvoidmain(String[]args){ inti,j; Scannerinput=newScanner(System.in); System.out.print("请输入一个值:"); intval=input.nextInt(); System.out.println("根据这个值可以输出以下加法表:"); for(i=0,j=val;i<=val;i++,j--){ System.out.println(i+"+"+j+"="+(i+j));表达式3表达式1 }表达式3表达式1 }}特点:表达式1中可以声明多个同一类型的变量并赋值,用“,”隔开表达式3可以是用“,”隔开的多个表达式,运算顺序从左到右for循环常见问题使用for循环要注意的几个问题:for(<初始化循环变量>;<循环条件>;<修改循环变量的值>){<循环体语句>;}关键字for后面小括号中的两个“;”都不可以省略。关键字for后面小括号中除了两个“;”以外都可以省略。如果表达式1省略,循环变量的初始值在for语句之前由赋值语句取得缺少初始化循环变量for(;i<10;i++){System.out.println("这是"+i);}这段代码没有对变量i进行初始化,会出现编译错误缺少条件判断语句for(inti=0;;i++){System.out.println("这是"+i);}编译正确,但是缺少循环条件,造成死循环缺少迭代部分for(inti=0;i<10;){System.out.println("这是"+i);i++;}编译通过,但是循环变量的值无变化,造成死循环省略表达式3,在循环体内应设法改变循环变量的值以结束循环缺少初始化循环变量、条件判断语句、迭代部分for(;;){System.out.println("这是测试");}表达式全省略,无条件判断,循环变量无改变,应在循环体内设法结束循环,否则会造成死循环小结问题:求1~100之间不能被3整除的数之和(使用for循环结构)分析:初始化部分:inti=1循环条件:只要整数不超过100,循环就不会停止:i<=100迭代部分:i每循环一次增加1:i++循环操作:判断i是不是能被3整除,如果能整除,就累加代码:publicclassDemo005{ publicstaticvoidmain(String[]args){ intsum=0;//声明变量保存累加后的和 for(inti=1;i<=100;i++){ if(i%3!=0){ sum=sum+i; } } System.out.println("和是:"+sum); }}知识点2:break语句[10分钟]Java中有三种跳转形式:break:停止continue:继续return:返回如何使用break语句用break语句解决问题:循环录入某学生5门课的成绩并计算平均分,如果某分数录入为负,停止录入并提示录入错误循环录入成绩,判断录入正确性:录入错误,使用break语句立刻跳出循环;否则,累加求和importjava.util.Scanner;/***Demo010.java演示break,录入错误退出*/publicclassDemo010{ publicstaticvoidmain(String[]args){ intscore;//每门课的成绩 intsum=0;//成绩之和 intavg;//平均分 booleanwrong=true; Scannerinput=newScanner(System.in); System.out.print("输入学生姓名:"); Stringname=input.next();//输入姓名 for(inti=0;i<5;i++){//循环5次录入5门课成绩 System.out.print("请输入5门功课中第"+(i+1)+"门课的成绩:"); score=input.nextInt(); if(score<0){ wrong=false; break; }对录入的分数进行判断,如果小于0,标记出错状态,并立即跳出整个for循环 sum=sum+score;对录入的分数进行判断,如果小于0,标记出错状态,并立即跳出整个for循环 } if(wrong){ avg=sum/5;//计算平均分 System.out.println(name+"的平均分是:"+avg); }else{ System.out.println("抱歉,分数录入错误,请重新进行录入!"); } }}小结break语句总结:break语句用于终止某个循环,使程序跳到循环体外的下一条语句。在循环中位于break后的语句将不再执行break语句可以用在for、while、do...while循环中break语句通常与if条件结构一起使用break一般位于if条件结构的最后一句示例:1~10之间的整数相加,得到累加值大于20的当前数分析:使用循环进行累加,从1到10判断累加值是否大于20如果大于20,则跳出循环,并打印当前值代码:publicclassDemo002{ publicstaticvoidmain(String[]args){ intsum=0;//声明变量表示累加的和 for(inti=1;i<=10;i++){ sum=sum+i;//累加 if(sum>20){ System.out.print("当前数是:"+i); break;如果大于20,则跳出循环,并打印当前值 }如果大于20,则跳出循环,并打印当前值 } }}知识点3:continue语句[10分钟]如何使用continue语句循环录入Java课的学生成绩,统计分数大于等于80分的学生比例分析:通过循环,获得分数大于等于80分的学生人数num判断:如果成绩<80,不执行num++,直接进入下一次循环在循环中要对录入的分数进行判断,如果小于80,跳出本次循环,执行下一次循环代码:importjava.util.Scanner;publicclassDemo002{ publicstaticvoidmain(String[]args){ intscore;//成绩 inttotal;//班级总人数 intnum=0;//成绩大于或等于80分的人数 Scannerinput=newScanner(System.in); System.out.print("输入班级总人数:"); total=input.nextInt();//输入班级总数 for(inti=0;i<total;i++){ System.out.print("请输入第"+(i+1)+"位学生的成绩:"); score=input.nextInt(); if(score<80){对录入的分数进行判断,如果小于80,跳出本次循环,执行下一次循环 continue;对录入的分数进行判断,如果小于80,跳出本次循环,执行下一次循环 } num++; } System.out.println("80分以上的学生人数是:"+num); doublerate=(double)num/total*100; System.out.println("80分以上的学生所占的比例为:"+rate+"%"); }小结continue:只能用在循环结构中continue作用:跳过循环体中剩余的语句而执行下一次循环通常与if条件语句一起使用,加速循环示例:求1~10之间的所有偶数和分析:使用循环进行累加,循环的范围是从1至10判断当前数是否为偶数如果为奇数跳过,执行下一个循环,如果为偶数,进行累加代码:publicclassDemo002{ publicstaticvoidmain(String[]args){ intsum=0;//定义一个变量,进行累加 for(inti=1;i<=10;i++){ if(i%2==1){ continue;//如果i为奇数,结束本次循环,进行下一次循环 } sum=sum+i; } System.out.print("1--10之间的偶数和是:"+sum); }}知识点4:循环结构总结[15分钟]循环结构三种循环都有4个必不可少的部分:初始部分循环条件循环体迭代部分while和for相同,先进行判断,后执行循环体内容do…while是先执行,后判断,至少执行一次各种循环结构的执行顺序适用情况:对于循环次数确定的情况,通常使用for循环对于循环次数不确定的情况:如果不要求先执行一次,用while循环如果要求先执行一次,用do…while循环控制流语句小结流程控制:用于引导程序的执行。顺序结构:语句顺序执行已经学过的控制流程语句:分支结构:语句在满足条件下执行if,if…else,if…elseif…else,switch循环结构:语句在满足条件下循环执行多次while,do…while,for跳转语句:允许程序跳跃执行break,continue总结[10分钟]总结for循环结构如何执行?在循环中使用什么方式跳出或终止循环?break与continue之间的差别是什么?第6讲--总结复习课1本讲任务使用Java应用程序实现以下功能:求两个自然数的最大公约数百元百鸡问题喝汽水问题水仙花数99乘法表打印图形质数判断问题:判断一个自然数是否是质数本讲目标学会使用Eclipse调试工具进行程序调试通过案例总结复习前5讲内容本讲重点使用Eclipse调试工具进行程序调试复习循环结构和条件结构本讲难点JAVA基本语法的综合使用回顾、预习检查[10分钟]回顾:什么是程序?什么是变量?已经学习的数据类型有哪些?if条件有哪三种形式?循环结构有哪三种形式?预习检查:调试的基本步骤是哪几步?什么叫最大公约数?什么是水仙花数?什么是质数?课程知识点讲解:知识点1:程序调试[20分钟]程序调试我们写好了程序,有时候会出现一些问题。其实,在实际工作中,我们把代码写完后,一般都会出现这样或那样的问题。那么我们怎么找到问题并解决呢?我们遇到问题后,总是希望:程序执行时忽闪一下就运行结束,怎么让程序一步一步运行?通过程序调试修正错误:使用do-while打印5次“你好中兴3G学员!publicclassDemoTest01{ publicstaticvoidmain(String[]args){ inti=1; do{ System.out.println("你好中兴3G学员!"); i=i+1;//即i++ }while(i<5); }}上面的代码只打印了4次!怎么用调试的方法查找错误呢?程序调试的步骤分析出错位置,设置断点单步运行观察变量发现问题修正代码,重新运行解决问题具体实施步骤1:分析出错位置,设置断点,然后,点击工作台上按钮,启动调试断点:程序在运行时会暂停下来的位置,一般是某行语句。设置断点:双击对应代码行的左侧边栏即可。取消断点:双击设置好的断点即可步骤2:单步运行调试启动后,运行到设置断点的代码行将停住点击按钮可以单步运行程序,观察程序运行过程还可以使用“F6”功能键运行单步跳过代码运行到哪一行,左侧边栏就会有一个蓝色的小箭头指示,同时该行代码的背景色变成淡绿色步骤3:观察变量单步运行时可以在“变量”视图中看到变量当前的值当变量的值发生变化时,变量和变量的值所在行的背景色会改变,可以提醒我们注意步骤4:发现问题变量i值变为5时就退出了循环,循环只进行4次步骤5:修正代码,重新运行修改循环条件为:i<=5步骤6:解决问题小结调试——程序员70%时间在做的事情:所以调试是非常重要的程序调试的目的:找出缺陷原因,修正缺陷调试的主要方法设置断点单步执行观察变量调试的主要步骤分析出错位置,设置断点单步运行观察变量的值发现问题修正代码,重新运行解决问题知识点2:程序调试示例[15分钟]利用程序调试对比break和continue对比方法:通过Eclipse单步运行,观察程序执行顺序变量值的变化观察案例案例1:1~10之间的整数相加,得到累加值大于20的当前数案例2:求1~10之间的所有偶数和观察案例1单步运行案例1进行代码跟踪设置断点点击按钮,启动调试点击按钮,程序单步执行观察程序执行流程、变量sum和i的变化我们通过对案例的跟踪观察,会发现:break关键字会中断当前循环,即跳出循环,使循环结束观察案例2单步运行案例2进行代码跟踪设置断点点击按钮,启动调试点击按钮,程序单步执行观察程序执行流程、变量sum和i的变化我们通过对案例的跟踪观察,会发现:continue关键字会结束本次循环,回到循环开始的地方,直接进行下一次循环操作小结循环中使用continue和break的区别break:会跳出循环continue:会中止本次循环,继续下一次循环代码阅读:输出值是多少?如果将break替换成continue,输出值又为多少?intsum=0; for(inti=0;i<5;i++){ if(i==3){ break; } sum=sum+i; } System.out.println("sum="+sum);break:输出3continue:输出7知识点3:案例[40分钟]课堂上只讲解前3个案例,其它案例如有课时安排,可以讲解,如无课时安排,要求学生自己完成。所有案例都要求学生完成。求两个自然数的最大公约数解决思路1:从1开始循环,每次把符合要求的值存储在一个变量中,最后存储起来的就是最大的约数完整代码示例:publicclassDemo0011{ publicstaticvoidmain(String[]args){ intn=6;//第1个自然数 intm=9;//第2个自然数 intresult=1;//用于保存最大约数 for(inti=1;i<=n;i++){ //如果当前数能被两个自然数整除,表明这个数是约数 if((n%i==0)&&(m%i==0)){ //将这个数保存下来 result=i; } } //循环结束后,result变量中的值就是最大的约数了 System.out.println("最大的约数是:"+result); }}解决思路2:从两个数字中最小的数字开始循环,每次减1(最大约数不可能大于最小的数字)每次把符合要求(即同时是两个数字的约数)的值存储在一个变量中,那么这个变量最后的值就是最大的约数第二个思路,循环的次数相对较少,效率较高完整代码示例:publicclassDemo0012{ publicstaticvoidmain(String[]args){ intn=6;//第1个自然数 intm=9;//第2个自然数 //用于保存最大约数,此数不可能大于两个自然数中最小的一个, //所以取出两个数中的最小值赋值给此变量 intresult=n>m?m:n; //从大到小进行循环 for(inti=result;i>=1;i--){ //如果当前数能被两个自然数整除,表明这个数是约数 if((n%i==0)&&(m%i==0)){ //将这个数保存下来 result=i; //因为是从大到小找约数,所以找到的第一个就是最大约数了 //找到后立即退出 break; } } //循环结束后,result变量中的值就是最大的约数了 System.out.println("最大的约数是:"+result); }}百元买百鸡问题:每只母鸡3元,每只公鸡4元,每只小鸡0.5元,如果花100元买100只鸡,请问有哪些可能?说明:每种鸡的数量都可以为零思路1:当母鸡的数量为0时,公鸡的数量从0~100,当公鸡的数量为0时,小鸡的数量也要从0变化到100如此类推,使用三重循环进行嵌套完整代码示例:publicclassDemo0021{ publicstaticvoidmain(String[]args){ for(inti=0;i<=100;i++){//母鸡数量从0~100进行变化 for(intj=0;j<=100;j++){//公鸡数量从0~100进行变化 for(intk=0;k<=100;k++){//小鸡数量从0~100进行变化 if(i+j+k==100&&i*3+j*4+k*0.5==100){System.out.println("母鸡数量:"+i+"\t公鸡数量:" +j +"\t小鸡数量:"+k); } } } } }}思路2:每只母鸡金额3元,100元最多买33只每只公鸡金额4元,100元最多买25只按照100元买100只的要求,小鸡的数量是100减去公鸡和母鸡的数量这样就可以简化代码:完整代码示例:publicclassDemo0022{ publicstaticvoidmain(String[]args){ for(inti=0;i<=33;i++){//母鸡数量从0~33进行变化 for(intj=0;j<=25;j++){//公鸡数量从0~25进行变化 intk=100-i-j;//小鸡的数量是100减去公鸡和母鸡的数量 if(i+j+k==100&&i*3+j*4+k*0.5==100)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 聊城职业技术学院《机械制造概论》2023-2024学年第一学期期末试卷
- 丽江文化旅游学院《防火防爆技术》2023-2024学年第一学期期末试卷
- 江西卫生职业学院《测量仪表与自动化》2023-2024学年第一学期期末试卷
- 江南大学《移动开发技术及应用》2023-2024学年第一学期期末试卷
- 华北理工大学轻工学院《物流运作规划》2023-2024学年第一学期期末试卷
- 自贡职业技术学院《艺术名著导读》2023-2024学年第一学期期末试卷
- 周口文理职业学院《虚拟仪器技术》2023-2024学年第一学期期末试卷
- 重庆科技职业学院《信息技术与课件制作》2023-2024学年第一学期期末试卷
- 浙江水利水电学院《民用航空法》2023-2024学年第一学期期末试卷
- 郑州西亚斯学院《太极拳理论基础》2023-2024学年第一学期期末试卷
- 《了凡四训》课件
- 芳香植物与芳香疗法讲解课件
- 不孕症诊断、治疗新进展课件
- 胖东来商贸集团各项管理制度
- 麦琴每日读经计划表
- 连续梁施工安全培训:挂篮施工及安全控制
- 土壤与肥料学课件
- 供应商物料质量问题赔偿协议(中文)
- 公共厕所(预算书)
- JSA作业安全分析表格
- 《猪肉分割及介绍》PPT课件.ppt
评论
0/150
提交评论