版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《Java程序设计实用教程》
第6版“十一五”“十二五”“十四五”普通高等教育本科国家级规划教材“十二五”江苏省高等学校重点教材(本科)
江苏“十四五”普通高等教育本科规划教材《Java程序设计实用教程》
(第6版)第1章Java概述第2章Java语言基础第3章类的封装、继承和多态
第4章接口、内部类和JavaAPI基础第5章异常处理第6章图形用户界面设计第7章多线程设计第8章流和文件操作第9章Socket通信第10章基于JDBC的数据库应用设计第11章基于JSP的Web应用设计第12章综合应用设计《Java语言程序设计》课程性质:专业必修课,64学时,4学分;课程设计1周,1学分。教学目标:面向对象理论;软件实用技术。特点:软件实用技术,涉及操作系统等理论。重点:面向对象概念,图形用户界面,线程,流与文件操作。难点:继承和多态,线程同步,流与文件操作。知识目标课程目标①面向对象设计基础:类的封装、继承、多态和抽象,以及接口、内部类、异常处理等;②Java应用设计技术:图形用户界面、线程、流和文件、Socket通信等。
能力目标①深刻理解面向对象程序设计的基础理论、设计思想和实现方法;②培养实践动手能力,积累经验,提高工程应用设计能力。
素质目标培养企业级应用软件的设计能力,独立分析问题和解决问题的能力,刻苦钻研的精神和严谨的治学作风。
1.课程目标教学目标①通过Java语言,进行面向对象程序设计的系统训练;②通过Java应用技术,培养企业级应用软件的设计能力。2.教学内容组织的设计特点(1)教学设计,3个目标层次。(2)教学内容组织。目标层次知识目标内容组织①理论基础说明面向对象程序设计思想、基础理论和实现方法。第2章Java语言基础第3章类的封装、继承和多态第4章接口、内部类和JavaAPI基础第5章异常处理②应用技术展示图形用户界面、线程、流和文件等Java应用程序的原理和设计技术。第6章图形用户界面设计第7章多线程设计第8章流和文件操作③综合应用展示解决复杂应用问题的综合应用设计的全过程,包括声明类,设计多个类的层次体系,构建复杂的图形用户界面,使用线程实现动画设计,采用文件保存数据,采用Socket通信实现远程数据通信。第9章Socket通信第12章综合应用设计2.教学内容组织的设计特点(3)教学主线的设计和实施教学过程,混合式教学设计64学时,讲课48学时,上机实验16学时,8次实验,课后自补实验。平时成绩(40%),考试试卷(60%)。中国大学MOOC,在线单元测验,4次;单元作业,交纸质,10页;第6章实验验收,每人不同题,题见附件,逐位验收,改进,通过后写报告,计平时分20%。课程设计,每人不同题,逐位验收,改进,通过后写报告。要求:独立完成,不接受网上抄来程序。中国大学MOOC,教学资源教学文件:教学大纲,授课计划,习题解答;课程资源:教学课件,教学视频,单元测验,
单元作业;慕课堂:在线单元测验,4次;实验环节:实验选题,课程设计任务书和选题;模拟考试:样卷。程序设计过程:清楚题意,明确任务;设计思想,选择策略,分解任务,模块化;功能实现,函数,改进,……,改进,完善。体会成功的喜悦。“春风得意马蹄疾”。自信。有想法,有创新,想做什么都能做成。自信来源于实力,实力来源于坚持不懈的刻苦训练。废寝忘食,夜不能寐,做梦写程序。重申纪律实验室不准打游戏。旷课1/4学时者,取消其考试资格。考试不能提前交卷。考试要带有效证件(身份证或学生证)。不能作弊,代考后果是双双开除,考试作弊后果……。教学风格,认真授课,严格管理。考前有问必答;考后不讨论分数。
勿谓言之不预也。课程设计成绩与考试成绩关联规则if(试卷成绩≤40||
试卷编程题得分==0)
//未能证明程序设计能力,
//实验和课程设计未达到教学目标课程设计重修;//没有补考重修课程和课程设计重修,时间是下一学年的同一学期。课程重修,重修形式:跟班读,参加下届期终考试,考A卷,没有平时成绩。若课时不足,自看教学录像。没获得学分,没有毕业证,肄业。事业与人生
把自己培养成精品,Tobeelite一个人,无论男女,其社会属性最重要的是事业,事业是一个人赢得自信和尊严的根本,不能仅停留在挣钱吃饭这种浅层次问题上。一个人活着,不能仅仅作为一种动物存在,要做出贡献,让自己的生命具有价值和意义。大学是人生的一个重要阶段,承前启后,是初高中应试教育的终点,却是人生自立、独立的起点。确定自己的人生目标和生活准则,选择要做什么,怎样做,并独立承担自己选择的后果。人生是一场淘汰赛这世界变化太快,不努力不进步,随时就会被淘汰出局。这世界不会为任何一个人停下脚步,也不会可怜任何一个被淘汰的人。可怜之人必有可恨之处。一个人迟早、肯定能够从他的付出中获得回报,也肯定会因为偷懒、幼稚、无知而付出代价,有些惨痛级别的代价是不能承受的。例如,大学不能毕业、没有学位、留级等,影响终身,后悔莫及。好自为之吧。第1章Java概述
物竞天择,适者生存。
§1.1了解Java§1.2JDK§1.3Java集成开发环境习题1第1章Java概述教学目标:初步了解Java。安装Java语言的运行环境JDK和Eclipse。内容要求:了解Java特点,理解由虚拟机支持的运行机制。实验要求:掌握采用JDK和Eclipse编译、运行和调试Java应用程序的操作。§1.1了解Java§1.1.1Java的诞生和发展§1.1.2Java的特点§1.1.3Java的核心技术§1.1.1Java的诞生和发展前身1991年,Green项目组,智能家用电器嵌入。诞生,1995年JDK1.0,Java开发工具包;Applet,嵌入Web网页运行Java程序。3个版本(JDK1.3)JavaME(嵌入版)JavaSE(标准版)JavaEE(企业版)§1.1.2Java的特点跨平台特性,Java虚拟机JVM“Writeonce,runanywhere。”§1.1.2Java的特点完全面向对象和简单性原则语言语法:放弃了C++的全局变量、goto语句、宏定义、全局函数以及结构、联合和指针数据类型。面向对象:放弃了多重继承、友元类和运算符重载,采用“单重继承+接口”的方式代替多重继承,提供语言级的内存自动管理和异常处理方式。§1.1.2Java的特点可靠性语言级别:提供严密的语法规则,在编译和运行时严格检查错误。异常处理。运行架构级别:资源回收。安全性安全模型。§1.1.3Java核心技术JavaApplication应用程序Application应用程序能够独立运行,运行方式:控制台和图形用户界面。Applet是能够嵌入Web页面的最小应用,不能独立运行,必须嵌入超文本(*.html)中,由浏览器中的Java解释器解释执行。【例1.1】JavaApplication应用程序publicclassHello{publicstaticvoidmain(String[]args){
System.out.println("Hello!");}}【例1.1】JavaApplication
应用程序,可接受命令行参数publicclassHello{publicstaticvoidmain(String[]args){
if(args.length==0)
System.out.println("Hello!");else
for(inti=0;i<args.length;i++)
System.out.println(args[i]);}}§1.1.3Java核心技术
JavaApplication应用程序图形用户界面线程流和文件操作Socket通信,聊天程序
数据库应用Web应用,JSP集合框架【习题1】1.了解Java1-2
什么是跨平台特性?Java如何实现跨平台特性?跨平台特性对于Java有什么意义?1-3Java保留、放弃了C/C++中哪些语法和面向对象机制?为什么?§1.2JDK§1.2.1安装和设置JDK§1.2.2编辑、编译和运行Java应用程序§1.2.3包§1.2.1安装和设置JDK下载并安装JDK,。jdk-18_windows-x64_bin.exe,安装程序。设置环境变量编辑批命令文件,jdk18.batsetpath=D:\ProgramFiles\Java\jdk-\binsetclasspath=.;D:\ProgramFiles\Java\jdk-\lib§1.2.1安装和设置JDK设置环境变量执行批命令,MS-DOS命令窗口C:\>d://转换盘符到D:D:\>cd
myjava//进入myjava文件夹D:\myjava>jdk18//执行批命令文件jdk18.bat§1.2.2编辑、编译和运行
Java应用程序编辑,记事本例1.1Hello.java,编码:UTF-8、GBK。编译D:\myjava>javac
Hello.java运行D:\myjava>javaHelloD:\myjava>javaHello>
Hello.txt//重定向命令行参数D:\myjava>javaHelloWorldWelcome§1.2.3包包的概念包是类的集合,对应文件夹。JavaAPI的常用包java.lang
语言包java.util
实用包java.text
文本包java.awt
抽象窗口工具包java.io
输入输出流包
网络包java.sql
数据库包javax.swing§1.2.3包引用包中的类包{.子包}.类|接口查看JavaAPI查看JavaAPI源程序及包等级导入包import
包{.子包}.类|接口|*;
声明类所在的包package
包{.子包};【例1.2】创建及使用包。创建包并设置classpath环境变量。创建文件夹D:\myjava\mypackage,包名mypackagesetclasspath=.;D:\Program Files\Java\jdk-\lib;D:\myjava声明Point类在mypackage包中。package
mypackage;publicclassPoint声明Line1类,导入mypackage包中的Point类。import
mypackage.Point;publicclassLine1
【例1.2】创建及使用包。图1-6坐标系,计算直线长度【例1.2】创建及使用包。编译和运行例1.2程序。D:\myjava>jdk18//再次执行批命令文件D:\myjava>javac
Point.java
将Point.class文件移动到mypackage文件夹中D:\myjava>javacLine1.java
D:\myjava>javaLine1_ex
§1.2.3包Java源程序结构package//声明包,第一句;省略时,默认包import//导入包,可多句;若引用当前包,可省略publicclass或interface//声明类或接口,公有权限,//只能一个,且文件名必须与类/接口名相同class//声明类,默认权限,当前包;可多句interface//声明接口,默认权限,当前包;可多句包可以压缩成jar文件【习题1】2.JDK1-4Java源程序文件编译后生成什么文件?程序的运行机制是怎样的?1-5Java应用程序是怎样的形式?如何运行?1-8
什么是包?包与类是什么样的关系?为什么需要包机制?§1.3Java集成开发环境Eclipse集成开发环境(IDE)提供编辑、编译、运行和调试Java应用程序。§1.3.1Eclipse集成开发环境§1.3.2编辑、编译和运行程序§1.3.3设置Eclipse环境属性§1.3.4设置项目属性§1.3.5程序调试技术§1.3.1Eclipse集成开发环境下载并安装工作区包含项目,项目包含源程序文件§1.3.1Eclipse集成开发环境JavaBrowsing透视图PackageExplorer,包浏览视图Outline,大纲视图Console,控制台视图§1.3.2编辑、编译和运行程序新建Java项目新建Java类编辑编译运行重构拷贝源程序文件,刷新项目切换工作区创建包编辑器功能
编辑代码提示添加语句结构注释行源代码查看编辑多程序
§1.3.3设置Eclipse环境属性修改编辑区的字体和颜色设置编码字符集导入已有项目更改JRE§1.3.4设置项目属性配置编译路径例3.3项目,引用例3.2项目中的类设置运行配置属性添加JAR包§1.3.5程序调试技术程序错误、发现时刻及错误处理原则语法错,编译时;语义错,运行时;逻辑错,不能发现。单步调试Debug透视图设置断点单步运行分段运行查看变量的当前值实验1编辑、编译和运行程序目的和要求:①掌握在JDK和Eclipse中编译和运行Java应用程序的操作。②理解Java包的概念和作用,掌握在JDK环境中创建自定义包、声明导入包的方法。实验内容:在JDK环境中编译和运行例1.1和例1.2。在Eclipse环境中运行例1.1和例1.2。第2章Java语言基础§2.1语言成分§2.2流程控制语句§2.3数组§2.4静态方法§2.5字符串§2.6算法分析与设计基础第2章Java语言基础教学目标:掌握Java的语法。这是Java程序设计的基础。内容要求:掌握数据类型、表达式、流程控制语句等语法,注意与C/C++差别。掌握数组类型,包括一维数组和二维数组。掌握方法声明和调用规则,掌握方法参数和返回值的传递规则。熟悉String字符串类及运算。重点:①数组。②静态方法,引用类型作为方法的参数和返回值。难点:①位运算,二进制;②算法分析与设计,包括递归算法等。实验要求:掌握Eclipse程序调试技术。§2.1语言成分§2.1.1标识符与关键字§2.1.2基本数据类型§2.1.3变量与常量§2.1.4运算符与表达式【习题2】1.语言成分§2.1.1标识符与关键字关键字标识符分隔符注释程序书写风格图2-1Java标识符的语法图§2.1.2基本数据类型什么是数据类型数据类型分类基本数据类型:8种引用数据类型3.基本数据类型(1)整数类型,表2-1,与操作系统无关,跨平台特性byte字节型,1字节,[-128,127],即[-27,27-1]short短整型,2字节,[-32768,32767]int整型,4字节,默认,符号位+(默认)或-十进制:数字范围是[0,9],除0外首个数字不能是0。八进制:前缀0,数字范围是[0,7],如-0127。十六进制:前缀0x或0X,数字范围是[0,9]和[a,f]或
[A,F](值10~15),如-0x7fffffff。long,8字节,后缀l或L。如99L3.基本数据类型(1)整数类型byte字节型,1字节,[-128,127],即[-27,27-1]【习题2-3】整数采用二进制补码表示及运算是怎样的?怎样计算byte整数的范围?补充【习题解答2.1】
整数以二进制补码表示及运算。《Java程序设计实用教程(第6版)习题解答》.ppt#3.【习题2.1】整数以二进制补码表示及运算。(1)整数原码(2)整数补码的编码规则(3)整数(补码)的位运算(4)整数补码的算术运算(5)整数算术运算的数据溢出问题3.基本数据类型(2)浮点数类型:float(4字节),double(8)标准记数法:+1.0,-123.45等。科学记数法:由“尾数E(或e)阶码”组成,
如-1.2345E+2表示-123.45。(3)布尔类型boolean,true或false
(4)字符类型char,Unicode编码字符。[\u0000,\uFFFF]([0,65535]),\u0041表示'A';转义字符,'\n'表示换行符。§2.1.3变量与常量变量变量声明[修饰符]类型变量
[=表达式]{,变量[=表达式]}inti,j;//变量未被初始化System.out.println("i="+i);//语法错,变量i未被初始化booleanfind=false;//赋初值,false是布尔常量charch='A';//'A'是字符常量变量参与的运算和操作,后叙§2.1.3变量与常量最终变量final
intvalue;value=100;//最终变量只能进行一次赋值常量直接常量数值型常量:整数和浮点数,如-123、3.14等。非数值型常量:字符常量和布尔常量,如'A'、true等。符号常量,常量声明final
intMAX=100;//常量标识符全部字母大写finaldoublePI=3.1415926;//表示π§2.1.4运算符与表达式运算符2.运算符的优先级3.结合性4.运算的类型兼容原则5.判断运算的正确性1.运算符(1)算术运算符单目运算符:+(正)、-(负)、++(自增)、--(自减);双目运算符:+(加)、-(减)、*(乘)、/(整除和实数除)、%(取余),例如
7/2//整除,取商值,运算结果是整数37.0/2//实数除法,运算结果是浮点数3.57%2//取余,取相除的余数,运算结果是整数1-7%2 //结果为-1,结果符号与被除数相同
【例2.1】求明天、昨天是星期几。intweek=6;//星期几,范围[0,6](week+1)%7//明天,若week=6,结果0
week=0;//星期天(week-1+7)%7//昨天,(w-1)%7=-1,(w-1+7)%7=6【思考题2-1】算术运算应用举例。①怎样表示month月份的下月和上月?②如何求出一个三位数n的各位数字?下月:month%12+1上月:month==1?12:(month-1)或(month-2+12)%12+1
百位:n/100十位:n/10%10或n%10/10个位:n%10
注意:把答案写在习题解答第3页。1.运算符(2)关系运算符:相等(==、!=),大小(>、<、>=、<=)
'a'<'A' //结果是false(3)位运算符:~(非)、&(与)、|(或)、^(异或)、<<(左移位)、>>(右移位)、>>>(无符号右移位)表2-4位运算的真值表AB~AA&BA|BA^B0010001000110101111110(3)位运算符图2-3整数补码,&和|位运算(3)位运算符~4//0…0100(4)求反~,结果是1…1011(-5)6^2//0110(6)异或^0010(2),是0100(4)1<<2//0001左移<<2位,低位补0,是0100(4),
//每左移一位即乘以2-8>>2//1…1000(-8)右移>>2位,高位以符号位1填
//充,结果是1…1110(-2),每右移一位即除以2
-1>>>24//1…111111111(-1)右移>>>24位,高位//以0填充,结果是0…011111111(255)(4)逻辑运算符逻辑运算符:&(与)、|(或)、!(非)、∧(异或)、&&(条件与)、||(条件或)。短路计算i>=0&&i<=9//当i<0时,结果为false,不计算i<=9ch=='A'||ch=='a'//当ch=='A'时,结果为true,不计算ch=='a'AB!AA&B、A&&BA|B、A||BA^Bfalsefalsetruefalsefalsefalsetruefalsefalsefalsetruetruefalsetruefalsetruetruetruetruetruetruefalse表2-5逻辑运算的真值表(5~8)赋值、类型强制转换、条件(5)赋值运算符:=
、+=等(6)类型强制转换符(数据类型)表达式(int)(98.4)//将浮点数取整(7)条件运算符表达式1?
表达式2:
表达式3(8)括号运算符圆括号运算符():改变表达式中运算符的运算次序。方括号运算符[]:表示数组元素。1.运算符(9)字符串连接运算符:+inti=10,j=20,max=i>j?i:j;System.out.println("max="+max);(10)点运算符:.(11)对象运算符:instanceof
(12)new运算符:申请数组的存储空间,创建对象。
注意:逗号是分隔符,仅用于分隔表达式,不是运算符,不能出现在表达式中。例如:inti=0,j=0;//正确,逗号是分隔符System.out.println(""+(i=1,j=2)); //语法错,表达式不能包含逗号【例2.2】判断闰年。天文历法规定,每400年中有97个闰年。凡不能被100整除但能被4整除的年份,或能被400整除的年份是闰年,其余年份是平年。如1996、2000是闰年,而1900是平年。从1600到1999的400年,能被4整除的年份有100个,去掉1700、1800、1900,则共有97个闰年。intyear=2000;//年份booleanleap=year%400==0||year%100!=0&&year%4==0; //先计算表达式,再赋值;
//带短路功能的逻辑运算,按逻辑运算符出现次序进行运算,此处先计算||,再计算&&System.out.println(year+"isaleapyear?"+leap);2.运算符的优先级3.结合性运算符的优先级,表2-7运算符的结合性单目运算符的结合性j=i++;//++左结合,等价于j=i;i++;j=--i;//--右结合,等价于i--;j=i;双目运算符的结合性,如赋值运算符是右结合i=j=2;//等价于j=2;i=j;,结果为i=2,j=2i+=j+=2;//等价于j+=2;i+=j;,结果为i=6,j=44.运算的类型兼容原则
(1)类型相容<1>数值类型的运算1.0+1//结果为浮点数2.01.0==1//结果为true字符是一种数值类型。例如:'a'+1//算术运算,结果是int型98(char)('a'+1)//结果是'b''a'==97//关系运算,结果为true'a'|2//位运算,结果是int型99图2-4数值类型的兼容关系,运算结果是范围大的数据类型<2>布尔值true和false,
不等同于1或0以下语法错:booleanb=0;//布尔类型不是整数true==1!0//整数不能进行逻辑运算,~0位运算inti,j,k;i>j>k//语法错,必须写成i>j&&j>k++i||++j&&++k//语法错,整数不能进行逻辑运算<3>多态的运算符,一词多义,|和&多态++i|++j&++k//整数进行位运算i>j&j>k//布尔类型进行逻辑运算,没有短路计算【思考题2-2】计算十六进制数字
对应的整数值。设charch表示十六进制的一个数字字符,写出获得ch对应整数值的表达式。ch>='0'&&ch<='9'?ch-'0':
ch>='a'&&ch<='f'?ch-'a'+10:ch-'A'+10
注意:把答案写在习题解答第7页。〖解释〗因为十六进制的数字字符范围是'0'~'9'和'a'~'f'或'A'~'F'
(表示值10~15)。上述表达式功能相当以下if语句嵌套:inti=0;if(ch>='0'&&ch<='9')i=ch-'0';elseif(ch>='a'&&ch<='f')i=ch-'a'+10;elsei=ch-'A'+10;【思考题2-2】计算十六进制数字
对应的整数值。已知radix进制范围是2~16,数字范围是‘0‘~’9‘和'a‘~‘f‘;设inti表示radix进制的一个数字值,写出将i转换成radix进制数字字符的条件表达式。【答】i>=0&&i<=9?(char)(i+'0'):(char)(i-10+'a')
注意:把答案写在习题解答第7页。(2)赋值相容①Java自动将表达式转化为较长的数据类型后再赋值。longbig=6;//6是int,自动转化为longdoublex=1.0f,y=0;floatz=0.0;
//语法错,0.0默认double②
特例byteb=127;//127是int,在byte范围内byteb=(byte)127;//等价于,赋值相容(3)类型强制转换后赋值inti=256;//256(0…0100000000)超出byte最大值byteb=(byte)i;//(byte)i意为取int最低1个字节,//(byte)256结果是0
doublex=98.5;inti=(int)(x+0.5);//将浮点数x按四舍五入方式取整
5.判断运算的正确性(1)byte、short类型,按int类型进行运算(byte)127+(byte)127//byte整数按int类型运算,结果是254
(2)数据溢出(3)避免浮点数的精度问题导致的运算结果错误(0.1+0.2)+0.3//0.60000000000000010.1+(0.2+0.3)//0.6(0.1+0.2)+0.3==0.1+(0.2+0.3)//false,浮点数结合律不成立(2)数据溢出习题2-11①
设byteb=127,问b+“+1=”+(++b)表达式的运算结果是_______,为什么?【答】"127+1=-128"【解释】byteb=127;//127是int,byte整数最大值,赋值相容b+1//128,int
b=b+1;//语法错误
++b;//b=-128,数据溢出错误//++b执行b=(byte)(b+1)【习题解答】int整数数据溢出Integer.MAX_VALUE+1的运算结果也将产生int数据溢出错误。【习题解答】习题2-11②
习题2-11②设byteb=-128;,表达式b+“-1=”+(--b)的运算结果是_______,为什么?【答】"-128-1=127"
注意:把答案写在习题解答第5页。【解释】byteb=-128;//-128是int,byte整数最小值,赋值相容--b;//执行b=(byte)(b+(-1))运算,b=127。
//数学意义是-128-1=127,byte数据溢出错误【习题2】1.语言成分2-1
什么是标识符?标识符与关键字在定义和使用方面有何区别?2-2Java的基本数据类型有哪些?引用数据类型有哪些?2-7什么是变量的作用域?在声明变量时,如何确定变量的作用域?2-8什么是最终变量?如何声明最终变量?2-10Java的运算分哪些类型?各有哪些运算符?§2.2流程控制语句§2.2.1顺序结构语句§2.2.2选择语句§2.2.3循环语句§2.2.4转移语句【习题2-12】Java的语句与C/C++的语句有什么不同?【答】不支持goto语句。§2.2流程控制语句§2.2.1顺序结构语句赋值语句变量=表达式;空语句复合语句{[变量声明或常量声明];
语句序列;}
注意:Java没有以下表达式语句。
i+1;//语法错,表达式;§2.2.2选择语句if语句if语句的语法格式if(布尔表达式)
语句1;[else
语句2;]if(i=0)//语法错1.if语句复合条件if(i>=100)&&(i<=999)if语句嵌套,else总是与最近的一个if语句匹配。if(i>=100)
if(i<=999)语句1;else//else与哪个if语句匹配?语句2;if(i>=100){
if(i<=999)
语句1;}else
语句2;2.switch语句switch(表达式){
case
常量表达式1:语句序列1;[break;]
case
常量表达式2:语句序列2;[break;][default:语句序列;]}Stringstr="abc";switch(str)//JDK8增强功能,支持字符串表达式{
case"abc"://字符串常量}§2.2.3循环语句while语句while语句语法while(布尔表达式)
语句;while语句循环执行次数问题讨论1.while语句【例】采用while语句计算1~n累加和如下,输出计算公式。inti=1,n=10,sum=0;System.out.print("Sum("+n+")=");while(i<n){sum+=i;System.out.print(i+"+");i++;}System.out.println(i+"="+(sum+i));//运行结果为Sum(10)=1+2+3+4+5+6+7+8+9+10=552.do-while语句do-while语句语法do{
语句;}while(布尔表达式);do-while语句循环执行次数问题讨论【例2.3】计算Fibonacci数列。本例目的:使用do-while循环语句求解问题。演示short整数类型的数据范围溢出问题。功能说明:Fibonacci数列如下,定义为首两项值为0和1,以后各项是其前两项值之和。{0,1,1,2,3,5,8,13,21,34,55,89,144,…}【例2.3】计算Fibonacci数列bytex=0,y=1;//最初两项的值do{System.out.print(""+x+""+y);x=(byte)(x+y);//每项的值是其前两项的值之和
y=(byte)(x+y);//(byte)
为什么?//两个byte整数的运算结果是int类型的,在进行类型强制转换后才能赋值}while(x>0&&y>0);//死循环吗?为什么?//若x<0或y<0,表示byte类型数据溢出,则停止循环,不会陷入死循环System.out.println(x>0?x:"");//若x>0,则输出x【例2.3】计算Fibonacci数列shortx=0,y=1;//最初两项的值do{System.out.print(""+x+""+y);x=(short)(x+y);//前两项值之和
y=(short)(x+y);//(short)为什么? //两个short整数运算结果是int类型,//类型强制转换后才能赋值}while(x>0&&y>0);//死循环?为什么?//若x<0或y<0,
表示short整数溢出,则停止循环System.out.println(x>0?x:"");//若x>0,则输出x
3.for语句for语句语法for(表达式1;表达式2;表达式3)
语句;for语句循环执行次数问题讨论使用for语句需要注意的问题【例2.4】求一个日期(年月日)对应的是星期几。本例目的:①使用switch和for等语句。②日期的表示和计算。技术要点:求总天数的计算公式如下:总天数=平年累计值+闰年累计值+当年前几月的累计天数+本月天数求总天数total的步骤描述如下。①求total的初值:total初值=平年累计值+闰年累计值。total=year-1980+(year-1980+3)/4;②计算当年前几月的累计天数,加到total上。③将本月天数加到total上。week=(week+total)%7;【实验题2-1】简单算法设计,
二重循环输出九九乘法表。输出n行数字塔,n=4。
1121123211234321
数字菱形,n=3:
1121123211211
§2.2.4转移语句return语句return[返回值];break语句和continue语句break; //退出循环continue; //继续循环§2.3数组§2.3.1一维数组§2.3.2二维数组【习题2-14】与C/C++的数组相比,Java的数组做了哪些改进?具有什么样的优越性?【习题2-15】作为引用数据类型,数组变量与基本数据类型的变量有哪些区别?特性引用数据类型动态数组§2.3.1一维数组声明一维数组变量数据类型[]数组或数据类型数组[]intx[],i=0;或int[]x,i;使用new运算符为数组分配空间数组=new
数据类型[长度];x=newint[5];intx[]=newint[5];数组长度属性数组.length§2.3.1一维数组数组元素的表示及运算数组[下标]//x[0],x[1],x[2],x[3],x[4]x[i]=x[i-2]+x[i-1];//数组元素参与其数据类型所允许的运算§2.3.1一维数组为数组赋初值intx[]={1,2,3,4,5};数组元素的初始化,表2-8【例2.5】计算Fibonacci数列,采用数组求解。【例2.3】计算Fibonacci数列。【思考题】voidprint(int[]mat)//形式”{,}”§2.3.1一维数组for语句作用于数组的逐元循环for(类型变量:数组)for(int
value:fib)//value获得fib数组每个元素,//相当于fib[i]
System.out.print(""+value);§2.3.1一维数组数组的引用模型基本数据类型变量的传值赋值§2.3.1一维数组数组的引用模型基本数据类型变量的传值赋值数组变量的引用赋值§2.3.2二维数组声明二维数组变量,申请存储空间,赋初值intmat[][],m=4,n=5;mat=newint[m][n];int[][]mat=newint[m][n];//上述两句合起来int[][]mat={{1,2,3},{4,5,6}};//赋初值int[][]mat={1,2,3,4,5,6};//语法错,不能省略{}二维数组元素表示格式如下:二维数组[下标1][下标2]mat[i][j]//表示第i行第j列的数组元素2.二维数组的引用模型intmat[][]=newint[m][n];【思考题】voidprint(int[][]mat)【例2.18,6-0单元作业】
螺旋方阵,采用二维数组存储n阶螺旋方阵将自然数1~n2由方阵的最外圈向内螺旋方式地顺序排列。例如,4阶螺旋方阵如下,起点是(0,0),顺时针或逆时针方向。1
2 341 12111012 13 14 52131691116 156314158109 8 74567(2)螺旋方阵,二重循环结构,按行/列不同次序。【例2.6】幻方。图2-15杨辉的九宫格构造算法起点是第0行中间,放置1。循环,value=1~递增变化,设(i,j),下一个位置是右上方,如5、6;若越界,将沿行、列方向看成环形,如2、3。若value是n的倍数,表示一条斜已满,则下一个位置是本列下一行(i+1,j),如4、7。二维数组存储,环形,下标i、j变化规律如下:i=(i-1+n)%n;//向上一行,取余j=(j+1)%n;//向右一列图2-16连续摆数法,构造奇数阶幻方【思考题2-3】4、5阶幻方采用连续摆数法构造4、5阶幻方阵,结果如何?是否正确?图2-14(c)杨辉的4阶幻方**设计偶数阶幻方的构造算法。【实验题2-7】判断幻方阵。不是3阶幻方。【例2.19】求n阶幻方的8个解。3.不规则的二维数组§2.4静态方法§2.4.1方法声明与调用§2.4.2参数传递【例2.7】一维整数数组的算法设计,随机数列、查找和排序等。【例2.8】杨辉三角。【习题2-16】Java类中的方法与C/C++中的函数有什么差别?【习题2-17】Java方法的参数能够作为输出型参数吗?§2.4.1方法声明与调用方法声明[修饰符]static[<泛型>]返回值类型方法([形式参数列表]){//以下是方法体
声明局部变量,作用域是当前方法体;//不能用public等声明控制权限,不能用static
语句序列;[return[返回值]];}方法调用方法([实际参数列表])【思考题2-4】求整数n的数字和publicstatic
int
digitSum(intn){
int
digsum=0;//局部变量,作用域是当前方法体
while(n>0)
{digsum
+=
n%10;//加个位数字n=n/10;//整除,即n/=10;
}returndigsum;//返回值是基本类型,传递值}
注意:把答案写在习题解答第9页。写出算式?§2.4.1方法声明与调用main()方法publicstaticvoidmain(String[]args){
intn=1234567890;//局部变量,实际参数
digitSum(n)//只能调用静态方法}main()方法自己只能被Java虚拟机调用执行,不能被其他方法调用。§2.4.2参数传递【例2.7】一维整数数组的算法设计,随机数列、查找和排序等。①数组作为方法的参数和返回值,传递引用。publicstaticint[]
random(intn,intrange){intx[]=newint[n];//局部变量,动态数组returnx;//返回x数组引用,未释放数组空间}publicstaticvoidprint(int[]x)实际参数向形式参数的传递原则,同赋值。形式参数=
实际参数;基本数据类型的参数传递值;引用数据类型的参数传递引用。【例2.7】一维整数数组的算法设计,
随机数列、查找和排序等。②int等基本类型数据采用==、!=、>、<、>=、<=关系运算符比较相等和大小。③一维数组的查找和排序功能,顺序查找算法,直接插入排序算法。publicstaticint
search(int[]x,intkey)publicstaticvoidinsertSort(int[]x)图2-18方法的参数或返回值分别是基本数
据类型或一维数组,参数传递规则同赋值顺序查找算法描述《数据结构与算法》§1.2.1
//在当前数据结构中,顺序查找与key相等的元素(数据类型为T);key提供查找条件的关键字T
search(Tkey){
for(T
elem:数据结构中的每个元素)//遍历
if(key与elem元素相等)//由T类型提供元素相等的方法returnelem;//查找成功,返回元素
returnnull;//遍历完成,查找不成功,返回查找不成功标记}
直接插入排序《数据结构与算法》§9.1.1
【实验题2-3】①一维整数数组,顺序查找算法及其应用,方法重载//在x数组中,下标从begin开始到end,顺序查找首次出现的与key相等的元素。重载int
search(int[]x,intbegin,intend,intkey)voidprintDuplicates(int[]x)//输出重复元素//随机数序列,[1,range-1];若different为true,则不可重复,默认false。重载int[]random(intn,intrange,
booleandifferent)【实验题2-3】①一维整数数组,顺序查找算法及其应用,方法重载//随机数序列,[1,range-1];若different为true,则不可重复。重载int[]random(intn,intrange,booleandifferent){
intx[]=newint[n],i=0;
while(i<n)//不能用for语句,因为不是每次都i++
{
x[i]=(int)(java.lang.Math.random()*range);
//由different确定是否可重复,顺序查找算法应用
if(x[i]!=0&&_______________________)
(!different||different&&search(x,0,i-1,x[i])==-1))i++;}returnx;}【实验题2-3】①一维整数数组的基本操作,求和、平均值、合并等。double[]算法相同//int可计算int
sum(int[]x) //求和doubleaverage(int[]x)//求平均值//可比较大小,int等基本类型数据采用==、!=、>、<、>=、<=关系运算符比较相等和大小int
maxMin(int[]x,booleanmax)//最大/小值//若数组长度>2,则去掉最大和最小值元素后求平均值doubleaverageExceptMaxMin(int[]x)【实验题2-3】
②排序数组的顺序查找算法。//在排序x数组中,顺序查找首次出现的与key相等元素,若查找成功返回序号,否则返回-1。publicstaticint
search(int[]x,
boolean
asc,
intkey){
inti=0;
while(i<x.length&&(asc?key>x[i]:key<x[i]))i++;returni<x.length&&
x[i]==key?i:-1;//返回序号}【实验题2-3】①数组扩充容量问题。
②排序数组的排序算法。publicstaticint[]
concat(int[]x,int[]y)publicstaticint[]
merge(int[]x,int[]y)2.常量形式参数int[]random(final
intn,intmax){n=10;//语法错,不能对常量赋值}voidprint(final
intx[]){x[0]=0;//可以更改常量数组元素值
x=newint[4];//语法错,不能对常量赋值,//即不能改变数组引用}3.可变形式参数voidprint(int...x)//将x视为int[]类型【例2.8】杨辉三角。杨辉三角(《详解九章算法》1261年)如下,其中任何一个整数等于它肩膀上的两个整数之和,n=5。11112113311464115101051杨辉三角的重要意义在于,其各行是二项式展开式(n=0,1,2,3,…)的系数表。,
【例2.8】杨辉三角。目的:二维数组作为方法的参数或返回值,传递引用。publicstaticint[][]
yanghui(intn)
{
intmat[][]=newint[n][];//局部变量,动态数组returnmat;//返回二维数组引用,未释放数组空间
}
publicstaticvoidprint(int[][]mat)【思考题2-5】采用一维数组
输出杨辉三角。
publicstaticvoidprintYanghui(intn)【实验题2-4】数列的和数三角形题意:设int[]x={3,1,2,4};,x数列的和数三角形,第1~n-1行每元素是上一行它肩膀上的两个数之和。31244367916
【实验题2-4】数列的和数三角形求解:①采用一维数组存储数列,输出其和数三角形。算法分析:第1~n-1行元素变化通式是,每行必须j--。
x[j]+=x[j-1]算法实现:
输出时控制加
前导空格可形
成所需三角形。
注意:把答案写在习题解答第10页。【实验题2-4】数列的和数三角形求解:②采用上三角的二维数组存储数列的和数三角形。算法分析:第1~n-1行元素变化通式是,每行必须j--。
mat[i][j]=mat[i-1][j]+mat[i-1][j+1]算法实现:
注意:把答案写在习题解答第10页。§2.5字符串字符串的基本概念定义。字符串s=“”是由n(n≥0)个字符组成的有限序列。序号i(index),n称为字符串s的长度。""称为空串。""称为空格串。子串。“at”是“data”的子串,序号是1的。比较。比较是否相等。比较大小。2.String字符串类型的赋值和连接运算(1)将字符串变量赋值为字符串常量Stringstr1
="abc";//字符串常量,双引号括号;
//默认数据类型是String类,变量赋值为常量Stringstr1='abc';//语法错charch='汉';//字符常量,单引号括号(4)不是字符数组
str[0]='a';//语法错,没有str[0]表示
(2)赋值运算和连接运算
(3)引用模型Stringstr1="abc";//=,变量赋值为常量Stringstr2=str1;//对象引用赋值str2=str1+"xyz";//+,连接串str1+="xyz";//+=,连接串并赋值inti=10;str1="i="+i;//+转换类型为串,"i=10"3.String类的成员方法(1)声明publicfinalclassString{
int
length() //长度
charcharAt(inti)//第i(≥0)个字符
boolean
equals(Object
obj)//比较串是否相等Stringsubstring(intbegin,intend)//返回从begin开始到end-1的子串Stringsubstring(intbegin)//从begin到串尾的子串}
(2)调用字符串变量.方法([实际参数列表])例2.4Stringstr="日一二三四五六";//汉字的字符长度是1"星期"+str.charAt(1)//字符'一'“星期”+str.substring(1,2)//子串“一”str.length() //str长度【思考题2-6】字符串运算【答】运行结果如下,看起来“Welcome”向左移动,不完全。str="elcomeW"str="lcomeWe"str="comeWel"以下语句序列的执行结果是什么?Stringstr="Welcome";for(inti=0;i<str.length();i++){
str=str.substring(1)+str.substring(0,1);
System.out.println("str=\""+str+"\"");}(3)格式化字符串//返回由format指定格式的字符串,args可变形式参数publicstaticStringformat(Stringformat,Object...args)%[参数索引$][宽度][.精度]变换类型例如,例2.8,杨辉三角。String.format("%"+(mat.length-i+1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- VSD负压引流护理人员的专业素养
- 《学习规划专项突破|直击考试高频考点》
- 《英语情感策略|克服焦虑建立自信保持动力》
- 老年患者静脉血栓预防与护理
- 《趣味学夜市|让课堂告别枯燥 爱上学习》
- 2026年中级经济师《农业经济》考试真题
- 2026年医学检验技师专业实践能力真题及答案解析
- 2026年初中教师资格证《综合素质》真题练习卷
- 河南省豫北名校2025-2026学年高一上学期阶段性测试(二) 生物试卷(解析版)
- 四川省巴中市2026届高三上学期一模化学试题
- 2026年抽水蓄能电站运行招聘试题含答案
- 2026江苏苏州实验室财务管理与服务部管理人员招聘笔试备考题库及答案解析
- 2025年麻风病防治知识竞赛复习试题库(附答案)
- 桥面防水培训资料
- 广场方案规划
- 精神科患者风险评估技术
- 临床PDCA提高儿科留置针使用率
- 2025至2030年中国凉菜行业发展研究报告
- 有机化学实验安全操作注意事项
- 小儿腹股沟疝课件
- 2025年山西省司法协理员招聘考试(公共基础知识)历年参考题库含答案详解
评论
0/150
提交评论