Java程序设计教学课件452_第1页
Java程序设计教学课件452_第2页
Java程序设计教学课件452_第3页
Java程序设计教学课件452_第4页
Java程序设计教学课件452_第5页
已阅读5页,还剩447页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一章

Java概述

Java程序设计本章主要内容Java的起源与发展Java的特点Java的运行机制Java开发环境小结2026/7/30李飞——计算中心2/30§1.1Java的起源与发展Java的起源起源于1991年SUN公司的GreenProject.JamesGosling博士领导。项目开发目标——用于编写各种电子产品的嵌入式程序的程序设计语言。语法结构类似于C++。曾用名Oak(橡树),市场定位——服务于计算机网络。命名为Java,有两种说法:其一,印度尼西亚有一个重要的岛屿——爪哇岛,盛产咖啡,开发人员起名Java寓意为世人端上一杯热腾腾的咖啡;其二说法为美洲俚语——咖啡之意。2026/7/30李飞——东北大学秦皇岛分校计算中心3/35Java的发展版本发布时间说明JDK1.01996.1正式运行版本,包括JVM,AWT,AppletJDK1.21998.12出现J2SE,J2EE,J2ME三个主要方向JDK1.32000.5也叫Kestrel美洲红隼,过渡版本JDK1.42002.2真正的成熟版。JDK1.52004.9官方声明支持Windows9X的最后一个版本JDK1.62006.12版本改名JavaSE6,JavaEE6,JavaME6,且开源JDK1.72009.2SUN被Oracle收购,开始支持MacOs,x86,x64,Sparc指令集JDK1.82014.3现在常用版本JDK1.92017.9最新版2026/7/30李飞——东北大学秦皇岛分校计算中心4/35§1.2Java的特点简洁有效纯面向对象的编程语言平台无关解释运行安全多线程动态性丰富的API文档和类库2026/7/30李飞——东北大学秦皇岛分校计算中心5/35Java虚拟机(JVM)是运行所有Java程序的抽象计算机,也是Java的运行环境。JVM组成一套字节码指令集一组寄存器一个栈一个垃圾回收堆一个存储方法域2026/7/30李飞——东北大学秦皇岛分校计算中心6/35Java的垃圾回收机制什么是垃圾?在程序运行过程中动态分配的内存空间,一旦用完后,如果不及时释放则会在程序运行周期长期被占用,从而降低系统性能。这些占而不用的内存空间就是垃圾。Java的垃圾回收机制提供了垃圾收集线程(后台系统级线程),它记录每次内存分配的情况,并统计每个内存指针的引用次数。在java虚拟机运行时空闲时,垃圾收集线程将检查是否存在引用次数为0的内存指针;如果有的话,则垃圾收集线程把该内存“标记”为“释放”。垃圾回收机制的作用无需程序员和用户关注垃圾回收问题。2026/7/30李飞——东北大学秦皇岛分校计算中心7/35§1.3Java的运行机制计算机语言的发展机器语言与汇编语言以机器设备的运行为核心高级语言面向过程的语言描述事物的发展和处理过程为核心面向对象的语言出发点:更直接地描述客观世界中存在的事物(对象)以及它们之间的关系。特点:客观事物看作具有属性和行为的对象。通过抽象找出同一类对象的共同属性和行为,形成类。通过类的继承与多态实现代码重用2026/7/30李飞——东北大学秦皇岛分校计算中心8/35§1.3Java的运行机制计算机语言的运行方式低级语言(机器语言和汇编语言)直接运行或宏汇编后运行。高级语言解释型高级语言编译型高级语言2026/7/30李飞——东北大学秦皇岛分校计算中心9/35§1.3Java的运行机制2026/7/30李飞——东北大学秦皇岛分校计算中心10/35Java通过JVM运行Java需要生成字节码文件*.class在JVM上解释执行*.class文件。§1.3Java的运行机制Java程序分类JavaApplication(Java应用程序)独立运行。Java应用程序必须得到Java虚拟机的支持才能够运行。JavaApplet(Java小应用程序)嵌入到网页中,在浏览器中运行。Java小应用程序运行之前必须先将其嵌入HTML文件的<applet>和</applet>标记中。当用户浏览该HTML页面时,Java小应用程序将从服务器端下载到客户端,进而被执行。2026/7/30李飞——东北大学秦皇岛分校计算中心11/35§1.3Java的运行机制(Java应用程序)的运行步骤编写源代码文件*.java(可使用任意的文本编辑器编写)生成字节码文件*.class(javac源文件名.java)运行字节码文件。(java字节码文件名)2026/7/30李飞——东北大学秦皇岛分校计算中心12/35应用程序模式Application的基本编程模式:

class用户自定义的类名

//定义类{

publicstaticvoidmain(Stringargs[])

//定义main()方法

{

方法体

}}2026/7/30李飞——计算中心13/30应用程序模式//文件名:Welcome.javapublicclassWelcome{publicstaticvoidmain(Stringargs[]){System.out.println("WelcometoJavaProgramming!");}//结束main方法的定义}//结束类Welcome的定义2026/7/30李飞——计算中心14/30§1.3Java的运行机制JavaApplet(Java小应用程序)的运行过程编写源代码文件*.java(可使用任意的文本编辑器编写)生成字节码文件*.class(javac源文件名.java)编写相应的网页文件(其中包含嵌入Java字节码文件的语句)在浏览器中打开网页运行。(详见教材P10-P11)2026/7/30李飞——东北大学秦皇岛分校计算中心15/35小应用程序模式Applet需要的HTML文件的最小集的格式为:<HTML><appletcode=类名.classwidth=宽度

height=高度></applet></THML>2026/7/30李飞——计算中心16/30小应用程序模式Applet的基本编程模式:importjava.awt.Graphics;//引入java.awt系统包中的Graphics类importjava.applet.Applet;//引入java.applet系统包中的Applet类class用户自定义的类名

extendsApplet//定义类{publicvoidpaint(Graphicsg)//调用Applet类的paint()方法

{

方法体

}}2026/7/30李飞——计算中心17/30§1.4Java开发环境JDK+文本编辑器JDK可以从网址/technetwork/java/javase/downloads/index.html下载JDK+Jcreater/download.htm下载JDK+NetNeans/technetwork/java/javase/downloads/index.html下载JDK+Eclipse(Myeclipse)/downloads/2026/7/30李飞——计算中心18/30下载JDK安装包安装(见教材P13)配置开发环境参数安装Java开发IDEJDK的安装与设置2026/7/30李飞——计算中心19/30小结与思考题内容提要Java语言的起源与发展过程Java的特点Java语言的运行机制Java语言的开发环境思考与练习Java语言的特点JVM的功能Applet和Application的区别2026/7/30李飞——东北大学秦皇岛分校计算中心20/352026/7/30李飞——计算中心21/35附录:Java程序开发过程

要创建一个Java需要三个基本步骤:(1)创建带有文件扩展名.java的源文件。(2)利用Java编译器生成文件扩展名为.class的字节码文件。(3)Application程序利用Java解释器运行该字节码文件,Applet利用Java自带查看器或浏览器运行嵌有字节码文件的HTML文件。2026/7/30李飞——计算中心22/30Java应用程序开发过程示例2026/7/30李飞——计算中心23/23例1

1.编写源文件(Java应用程序的源文件是由若干个书写形式互相独立的类组成)。publicclassHello{publicstaticvoidmain(Stringargs[]){System.out.println("这是一个简单的Java应用程序");

Studentstu=newStudent();stu.speak("Wearestudents");}}classStudent{publicvoidspeak(Strings){System.out.println(s);}}源文件命名为Hello.java保存至C:\chapter1。注:良好的编码习惯、源文件的命名规则2.编译Java源程序。C:\chapter1\>javacHello.java3.运行Java程序。C:\chapter1\>javaHelloJava应用程序开发过程示例(联合编译)2026/7/30李飞——计算中心24/35例1.编写源文件。

分别编辑、保存三个Java源文件Circle.java、Rectangle.java、MainClass.java至C:\chapter1中

。其中MainClass.java是含有主类的Java应用程序的源文件。2.编译Java源程序。C:\chapter1\>javacMainClass.java编译MainClass.java的过程中,Java系统会自动地编译Circle.java和Rectangle.java,这是因为应用程序要使用Circle.java和Rectangle.java源文件产生的字节码文件。编译通过后,C:\chapter1目录中将会有Cirlce.class、Rectangle.class和MainClass.class三个字节码文件。3.运行Java程序。C:\chapter1\>javaMainClassCircle.java源代码:Rectangle.java源代码:2026/7/30李飞——计算中心25/30publicclassCircle{voidprintArea(doubler){System.out.println(r*r*3.1416926);}}publicclassRectangle{voidprintArea(doublea,doubleb){System.out.println(a*b);}}Java应用程序开发过程示例(联合编译)MainClass.java源代码:publicclassMainClass{publicstaticvoidmain(Stringargs[]){Circlecircle=newCircle();circle.printArea(100);Rectanglerect=newRectangle();rect.printArea(100,65);}}2026/7/30李飞——计算中心26/30Java应用程序开发过程示例(联合编译)第二章

Java程序设计基础

Java程序设计本章主要内容

2.1Java基本语法12.2数据类型22.3常量和变量32.4运算符与表达式42.5常用类和方法528§2.1Java基本语法标识符在Java中,能够标识程序中各种元素惟一性和存在性的名称为标识符。 保留字

Java语言中有一些特殊的字符组合,它们由系统预先定义,用来表示语句的功能或元素的类型等特定的含义,这类字符的组合称为保留字,也叫关键字。2026/7/30李飞——计算中心29/35标识符的命名规则1.Java标识符可由数字、字母、下划线(_)、美元符号($)和人民币符号(¥)组成,可以是单词、词组或缩写等,长度不限。2.在Java中是区分大小写的,而且首位不能是数字。3.Java保留字不能作为用户定义的Java标识符。4.标识符的命名最好能反映出其作用,做到见名知意。30举例合法的标识符myNameMy_namePoints$points_sys_taOK_23b_3_非法的标识符#name25nameClass&timeif31标识符的书写约定变量名。可大小写混写,首字符小写,字间分隔符用字的首字母大写。不用下划线,少用美元符号。例如,zhang,zhang3,myDate等。常量名。基本数据类型的常量名使用全部大写字母,字与字之间用下划线分隔。对象常量可大小混写。例如,YEAR、SIZE_NAME、PI等。32标识符的书写约定包名。包名全部小写,连续的单词只是简单地连接起来,不使用下划线。例如,hello、chair、redapple等。源文件名。源文件名必须和公有类名相同,如果文件名和类名不相同则会导致编译错误。尤其要注意的是Java是大小写敏感的。文件名的后缀为.java。33Java的保留字34abstractassertbooleanbreakbytecasecatchcharclassconstcontinuedefaultdodoubleelseenumextendsfinalfinallyfloatforgotoifimplementsimportinstanceofintinterfacelongnativenewpackageprivateprotectedpublicreturnstrictfpshortstaticsuperswitchsynchronizedthisthrowthrowstransienttryvoidvolatilewhile语句的书写规则

每个Java语句以“;”结束。Java语句间的组成格式自由,语句可以从一行内任何位置开始

可以一个语句占多行,也可以一行中有多个语句。35语句的分类1.方法调用语句。如:System.out.println("Hello");2.表达式语句。由一个表达式构成一个语句。如:x=23;3.复合语句。用“{}”把若干语句括起来可构成复合语句。复合语句也被称为语句块或代码块。每个复合语句可以看成是一个语句,可以用在允许使用单一语句的任何地方。36语句的分类4.流程控制语句。用来控制程序的执行过程的语句。如空语句、注释语句等。如:5.其他语句。主要包括常量、变量、对象、类和包等的定义语句和一些具有特殊功能的语句。例例37ifa>3b=1;elseb=0;inta,b;;//说明文字空白、注释与分隔符空白换行符及回车键、空格键、水平定位键(tab)都是空白。Java程序的元素之间可插入任意数量的空白,编译器将忽略掉多余的空白程序中除了加入适当的空白外,还应使用缩进格式,使得同一层语句的起始列位置相同38空白、注释与分隔符——注释

单行注释。单行注释内容以双斜线“//”引导,表示此行是注释行,“//”后面的内容为注释。单行注释通常放在被注释的语句的上一行或语句的后部,用于常量、变量和语句的说明。

多行注释。多行注释以“/*”开头以“*/”结束,中间可以插入多行说明文字。多行注释可用于对一段(多行)程序代码进行注释。主要用于对算法和方法的说明。

文档注释。以“/**”开始,以“*/”结束,中间可以插入多行说明文字。用于一段程序代码的注释,主要用在类、方法的定义代码前面,用来说明类或方法的功能和使用方法。格式//注释内容/*多行

注释

内容*//**文档

注释

内容*/39分隔符分号;花括号{}方括号[]圆括号()空格圆点.逗号,冒号:语句结束符。复合语句的边界,用于定义代码块用于定义数组元素的下标方法的参数声明或运算符无功能,仅用于使程序美观表示从属关系,表明类或实例对象的指定成员。用于分隔变量说明的各个变量和方法的各个参数用于分隔标号和语句。40注意:Java语句可以跨越多行书写,但字符串和变量名不能跨越多行。程序结构与编程习惯Java项目的结构Java中常见的文件.Jar:Java包文件.java:源代码文件.class:字节码文件.ser:对象状态序列化文件2026/7/30李飞——计算中心41/35Java源程序的基本结构0个或1个包声明语句(PackageStatement)package包名;//必须放在第一行0个或多个包引入语句(ImportStatement)import包名;//可有多个0个或多个类声明语句(ClassDeclaration)Class类名{}

//可有多个,但只能有一个公有的0个或多个接口声明(InterfaceDeclaration)Interface接口名{}//可以有多个。2026/7/30李飞——计算中心42/35Java的编程习惯注意缩进缩进就是在语句前加一些空格,以突出语句的层次感。注意注释好的程序注释习惯可以通过不同级别的注释,方便程序员了解变量、语句和程序的功能,同时方便程序的在开发和修改。注意使用包把有关联的程序放在同一个包中,可以方便程序的访问和阅读。2026/7/30李飞——计算中心43/35§2.2Java的数据类型44数据类型基本数据类型复合数据类型类类型布尔类型:boolean数组接口类型:interface字符类型:char数值类型浮点数类型:float,double整数类型:byte,short,int,longJava的基本数据类型基本数值类数据类型的表示不同进制的表示方法31——十进制表示037——八进制表示,首位0表示这是一个八进制数。0x001f——十六进制表示,首位0x代表十六进制数长整型表示可以在数值后加“L”或“l”定义。31L,037L或0x001fL。科学记数法表示314.1563.14156E2或3.14156e2。45Java的基本数据类型非数值型数据字符型数据‘a’——英文字符‘张’——中文字符‘\n’——转义字符回车换行。‘\u????’——一个特殊的Unicode字符,????为4位16进制数,转义字符在Java中允许使用一些字符通过’\’转变为另一种含义,这种字符称为转义字符。转义字符一般通过键盘不方便输入如回车和换行等。46Java的基本数据类型47表2.3Java的常用转义字符转义字符描述\ddd八进制数表示的ASCII子符\uxxxx16进制数表示的Unicode字符\’单引号\”双引号\\反斜杠\r回车\n换行\f换页\b后退一格\t横向跳格(Tab)将光标移到下一个制表位基本数据类型的范围程序2-5

变量的说明和赋值482.3常量和变量常量是指在程序运行过程中数值不发生改变的量。final[static]数据类型

常量名=常量值变量是指在程序运行过程中,值可以发生改变的量。49变量的声明与初始化变量的声明类型变量名[=初始值][,变量名[=初始值]……];变量的初始化[作用域][数据类型]变量名=常量|变量|表达式;变量的默认值Boolean的默认值falsechar的默认值‘\u0000’Byte,int,short,long,float,double的默认值050类型转换各类型所占用的位数从短到长依次为: byteshortcharintlongfloatdouble强制转换(目标数据类型)原数据类型的表达式51表2.4数据类型自动转换表原数据类型自动转换的目标数据类型byteshort,char,int,long,float,doubleshortint,long,float,doublecharint,long,float,doubleintlong,float,doubleFloatdouble类型转换当位数多的类型向位数少的类型进行转换时,需要用户明确指明,即进行强制类型转换一般地,高级类型(即位数较多的数据类型)转为低级类型(即位数较少的数据类型)时,截断高位内容,因此会导致精度下降或数据溢出52inti=3;byteb=(byte)i;§2.4运算符和表达式赋值运算符=,+=,-=,*=,/=,%=,<<=,>>=,>>>=,&=,^=,|=算数运算符+,-,*,/,%,++,--关系运算符>,<,>=,<=,==,!=逻辑运算符!,&&,||位运算符~,|,&,^,<<,>>,>>>其他运算符?:,,,.,[],(),new,instanceof53§2.4运算符和表达式运算符的优先级[],.,(参数),后缀++,后缀--。前缀++,前缀--,+,-,~,!New,(类型)*,/,%+,-<<,>>,>>><,>,<=,>=,instanceof==,!=,&,&,^,^|,|&&||?:赋值54运算符结合性自左至右自右至左自右至左自左至右自左至右自左至右自左至右自左至右自左至右自左至右自左至右自左至右自右至左自右至左§2.5常用类和方法如何调用类中的方法和成员变量静态的import包名.类名;类名.方法名(参数表)类名.类变量名[包名.][类名.]方法名(参数表)[包名.][类名.]类变量名非静态的对象名.方法名(参数表)对象名.成员变量名55类和方法的使用例2.21类方法的调用2026/7/30李飞——计算中心56/35importjava.lang.Boolean;publicclasseg2_21{ publicstaticvoidmain(String[]args){ doublea=3.0,b=4.0,c; Stringstr="true"; c=Math.sqrt(a*a+b*b); System.out.println(c); System.out.println(Boolean.valueOf(str)); System.out.println(java.lang.Integer.MAX_VALUE); }}5.0true2147483647数值计算相关方法Java通过算术运算符支持基本的算术运算。对于较复杂的数学运算,Java平台采用类方法的手段来实现。在java.lang包中,Java提供了一个称为Math的类。通过Math类,提供了一系列关于数学运算的方法来实现数学运算中常用的函数运算功能。Math类还提供了一些数学常用的常数如Math.PI表示数学上的圆周率π,Math.E表示自然对数的底e。2026/7/30李飞——计算中心57/35表2.12常用的与数学函数相关方法方法名参数类型返回值类型说明sin(a)doubledouble求a的三角正弦,a为弧度值。cos(a)doubledouble求a的三角余弦,a为弧度值。tan(a)doubledouble求a的三角正切,a为弧度值。asin(a)doubledouble求a的反正弦,返回的角度在-π/2到π/2之间。acos(a)doubledouble求a的反余弦,返回的角度在0.0到π之间。atan(a)doubledouble求a的反正切,返回的角度在-π/2到π/2之间。sinh(x)doubledouble求x的双曲线正弦。cosh(x)doubledouble求x的双曲线余弦。tanh(x)doubledouble求x的双曲线正切。toRadians(angdeg)doubledouble将角度angdeg转换为弧度值。toDegrees(angrad)doubledouble将弧度angrad转换为角度值。exp(a)doubledouble求ea。log(a)doubledouble求lna的值。log10(a)doubledouble求以10为底a的对数。sqrt(a)doubledouble求a的算数平方根。cbrt(a)doubledouble求a的立方根。pow(a,b)doubledouble求ab。round(a)floatdoubleint求最接近参数a的整数,如round(3.5)的值为4,round(-3.5)的值为-3。random()—double求大于等于0.0且小于1.0的伪随机数。abs(a)求a的绝对值。且返回值和参数a数据类型相同。max(a,b)求a和b中的较大者,且返回值和参数a数据类型相同。min(a,b)求a和b中的较小者,且返回值和参数a数据类型相同。signum(d)返回参数d的符号,且返回值和参数a数据类型相同。58字符串处理相关方法相关的类:java.lang.String类方法:通过String.方法名(参数);调用成员方法通过String对象.方法名(参数);调用2026/7/30李飞——计算中心59/35String类方法表2.14将其他数据类型转换为字符串的方法方法功能valueOf(b)返回参数b的字符串表示形式。valueOf(char[]data,intoffset,intcount)返回char数组中从第offset开始的count个字符所组成的字符串参数的字符串表示形式。valueOf(char[]data)返回char数组参数的字符串表示形式。60通过字符串对象调用的方法

表2.13通过字符串对象调用的方法方法名功能charAt(intindex)求字符串中第index个字符compareTo(Stringstr)按字典顺序比较str和调用方法的字符串对象,如果str等于此字符串,则返回0;如果此字符串小于str,则返回小于0的值;如果此字符串大于str,则返回一个大于0的值。concat(Stringstr)将str连接到此字符串的结尾。toLowerCase()把字符串全部转换为小写字符。toUpperCase()把字符串全部转换为大写字符。trim()去除字符串的前导空白和尾部空白。toCharArray()将字符串转换为一个字符数组。indexOf(Stringstr)求str在字符串中首次出现时的索引值。isEmpty()判断字符串是否为空。空则返回true。length()求字符串的长度。substring(intbeginIndex)求从beginIndex开始,到此字符串末尾的子字符串。substring(intbeginIndex,intendIndex)求从beginIndex开始,直到endIndex-1的子字符串。61类型转换相关方法Java通过一组类来完成各种基本数据类型之间的转换过。这些类以基本数据类型的名称为类名,所不同的只是类名的首字符大写,这种类称为基本数据类型的包装类。2026/7/30李飞——计算中心62/40常用的包装类Java.lang.IntegerJava.lang.ByteJava.lang.ShortJava.lang.LongJava.lang.DoubleJava.lang.FloatJava.lang.BooleanJava.lang.Character63常用的数据转换方法表2.16常用的数据转换方法方法名功能所属类parseInt(Strings)把字符串转换为整数。IntegerparseLong(Strings)将字符串转换为十进制long型数据。LongparseShort(Strings)将字符串转换为十进制short型数据。ShortparseDouble(Strings)将字符串转换为十进制double型数据。DoubleparseFloat(Strings)将字符串转换为十进制float型数据。FloatparseByte(Strings)将字符串转换为十进制byte型数据。ByteparseBoolean(Strings)将字符串转换boolean型数据BooleantoLowerCase(charch)返回参数的小写字符CharactertoUpperCase(charch)返回参数的大写字符Character64这些方法均为类方法,可用“所属类名.方法名(参数)”的形式调用小结标识符和保留字标识符的命名规则Java程序结构常量和变量声明、定义和初始化赋值数据类型运算符和表达式运算符的优先级与功能表达式的书写方法常用的类String,Math,基本数据类型的包装类2026/7/30李飞——计算中心65/402026/7/30李飞——计算中心66/40全国大学生信息安全竞赛参赛指南全国大学生信息安全竞赛参赛指南位运算运算符功能说明~按位取反10,01&按位与1&1=1,1&0=0,0&0=0^按位异或1^1=0^0=0,1^0=1|按位或1|1=1|0=1,0|0=0>>算术右移在移位中符号被复制,8<<2=2<<算数左移在移位中符号被复制1>>2=22>>>逻辑右移在以为过程中符号不被拷贝<<<逻辑左移在以为过程中符号不被拷贝李飞计算中心67位运算——按位与(&)运算规则将两个运算量的每一个位进行逻辑与操作举例:计算3&53:000000115:(&)000001013&5:0000000168

李飞计算中心位运算——按位或(|)运算规则将两个运算量的每一个位进行逻辑或操作举例:计算3|53:000000115:(|)000001013|5:0000011169

李飞计算中心位运算——按位异或(^)运算规则两个操作数进行异或:

若对应位相同,则结果该位为0,

若对应位不同,则结果该位为1,举例:计算071^052071: 00111001052:(^)00101010071^052: 0001001170

李飞计算中心位运算——按位异或(^)用途:使特定位翻转(与0异或保持原值,与1异或取反)例如:要使01111010低四位翻转:

01111010(^) 00001111 0111010171

李飞计算中心位运算——取反(~)单目运算符:对一个二进制数按位取反。例:025:0000000000010101

~025:111111111110101072

李飞计算中心位运算——移位左移运算(<<)左移后,低位补0,高位舍弃。右移运算(>>)右移后,低位:舍弃

高位:无符号数:补0

有符号数:补“符号位”73李飞计算中心第三章

Java程序的流程控制

Java程序设计本章主要内容

算法顺序结构选择分支结构循环结构小结2026/7/30李飞——计算中心75/30算法定义:通过计算机解决一个问题而采取的确定的方法和步骤。算法的特点确定性有穷性有0个或多个输入有1个或多个输出可执行2026/7/30李飞——东北大学秦皇岛分校计算中心76/35李飞——东北大学秦皇岛分校计算中心算法算法的评价方法正确性时间复杂度空间复杂度可读性健壮性2026/7/30李飞——东北大学秦皇岛分校计算中心77/35算法算法的描述工具自然语言描述法流程图描述法N-S图描述法类语言描述法2026/7/30李飞——东北大学秦皇岛分校计算中心78/35自然语言描述用自然语言描述算法。例3.1:求1+2+3+┉+100,即∑_(n=1)^100▒n。步骤1:求1+2的和,得到结果3。步骤2:求步骤1的结果与3相加的和,得到1+2+3的结果6步骤3:求步骤2的结果与4相加的和,得到1+2+3+4的结果10……步骤99:求步骤98的结果与100相加,得到最终结果5050。2026/7/30李飞——东北大学秦皇岛分校计算中心79/35流程图的画法元素名称起止框输入/输出框处理框判断框流程线连接点图形2026/7/30李飞——东北大学秦皇岛分校计算中心80/35基本流程顺序结构选择结构(二选一)选择结构(多选一)循环结构(当型循环)循环结构(直到型循环)2026/7/30李飞——东北大学秦皇岛分校计算中心81/35模块1模块2条件P循环体A条件P循环体A例3.2:求两个正整数a和b的最小公倍数。2026/7/30李飞——东北大学秦皇岛分校计算中心82/35N-S图的画法顺序结构选择结构(二选一)选择结构(多选一)循环结构(当型循环)循环结构(直到型循环)2026/7/30李飞——东北大学秦皇岛分校计算中心83/35ABNoABPYes循环条件PA循环条件PA例3.2:求两个正整数a和b的最小公倍数。2026/7/30李飞——东北大学秦皇岛分校计算中心84/35类语言表示法用类似计算机语言来描述算法。例3.2:求两个正整数a和b的最小公倍数。input a,b;if(a>b)thenmax=a,min=belsemax=b,min=at=maxwhile(t%min!=0)t=t+maxprint(t)2026/7/30李飞——东北大学秦皇岛分校计算中心85/35Java语句概述语句(statements)是程序的基本组成单位,在Java语言中,有简单语句和复合语句两类语句。一条简单语句总是以分号(;)结尾,它表示一个要执行的功能(如shorts=258;)。复合语句:是用一对花括号{}括起来的若干个语句(一般也称为语句块――blocks)。仅有一个分号的语句称空语句。2026/7/30李飞计算中心顺序结构相关语句表3.1常用简单语句汇总表语句功能语句格式注释语句//单行注释内容/*多行注释内容*//**文档注释*/包声明语句package包名;包引入语句import包名.*;import包名.类名;类定义语句[static][public|private]class类名{}常量的定义语句final[static]数据类型常量名=常量值;变量的声明类型变量名[=初始值][,变量名[=初始值]……];变量的赋值语句[作用域][数据类型]变量名=常量|变量|表达式变量名复合赋值运算符常量|变量|表达式方法调用语句[包名.]类名.类方法名([参数表]);实例对象名.方法名([参数表]);对象创建语句对象名=new构造方法([参数表]);new构造方法([参数表]);2026/7/30李飞——东北大学秦皇岛分校计算中心87/35顺序结构相关语句说明作用范围限定词Public:公有的,代表声明的变量、类、方法等可以被所有其他的类、方法和变量访问。Private:私有的,仅供当前范围内(当前类、当前方法)使用。不写:包范围。供同一包内的所有类和方法使用,和其子类中使用特殊限定词Static:静态的,会把相关内容存在特殊的存储区,影响到程序运行周期中的所有模块Final:最终的,他说明的元素不可继承,是能用,不能改。可看成常量不写:代表局部的动态的,作用范围为定义语句所在的模块。程序运行结束会释放。类型:基本数据类型:boolean,char,byte,short,int,long,float,double,类名2026/7/30李飞——东北大学秦皇岛分校计算中心88/35顺序结构相关语句例3.3标准输出方法的使用。2026/7/30李飞——东北大学秦皇岛分校计算中心89/35publicclasseg3_3{ publicstaticvoidmain(String[]args){ bytea=34; intb=2,c=3; doubled=3.14; chare[]={'c','h','i','n','a',''}; bytef[]={'m','y','','m','o','t','h','e','r','l','a','n','d'}; floatg=2.71f; Strings="HelloChina"; booleanl=true; System.out.print(a); System.out.print(b); System.out.println(c); System.out.println(d); System.out.print(e); System.out.write(f,0,13); System.out.println(g); System.out.println(s+"!"); System.out.print(l); }}用标准输入方法输入数据importjava.util.*;publicclasseg3_4{ publicstaticvoidmain(String[]args){ intage; Strings="mynameis"; Stringname=newString(); Scannerscanner=newScanner(System.in);//创建标准输入对象 System.out.println("请输入你的姓名和年龄"); name=scanner.nextLine();//获取输入内容 age=scanner.nextInt();//获取输入内容 System.out.println(s+name+"."); System.out.println("I'm"+age+"yearsold."); }}2026/7/30李飞——东北大学秦皇岛分校计算中心90/35§3.3选择结构分支结构

Java语言实现选择结构的语句有两种:一种是两路分支选择的if-else语句;一种是多分支选择的switch语句。2026/7/30李飞计算中心条件P模块1模块2YN条件P模块1模块1……语句格式if(逻辑表达式)语句1;[else语句2;]功能先计算逻辑表达式的值。如果为true执行语句1,否则执行语句2.如果省略语句2则逻辑表达式为false时不作任何操作。2017年3月李飞计算中心选择结构例3.7判断一个数是否非负数。publicclasseg3_7{ publicstaticvoidmain(String[]args){ intn; n=(int)(Math.random()*200-100); if(n>=0){ System.out.println(n+"是非负数"); } else System.out.println(n+"是负数"); }}

if语句

2026/7/30李飞计算中心if语句

——嵌套

一般形式if()if()语句1else语句2elseif()语句3else语句4注意语句1、2、3、4可以是复合语句,每层的if与else配对,或用{}来确定层次关系。2026/7/30李飞计算中心switch语句一般形式switch(表达式){case常量表达式1:语句1;case常量表达式2:语句2;┆case常量表达式n:语句n;default:语句n+1;}2026/7/30李飞计算中心执行顺序以case中的常量表达式值为入口标号,由此开始顺序执行。因此,每个case分支最后应该加break语句。每个常量表达式的值不能相同,次序不影响执行结果。可以是多个语句,但不必用{}。可以是整型、字符型switch语句switch语句的表达式只能是byte,,char,short,int类型。

case常量必须与表达式类型兼容,且各case的常量互不相同。允许多个不同的case执行相同的语句。case1:case2:casen:语句;break;break语句会直接跳到switch之后。2017年3月李飞计算中心2017年3月李飞计算中心eg3.11根据输入的成绩判定成绩档次importjava.util.*;publicclasseg3_11{ publicstaticvoidmain(String[]args){ Scannerscanner=newScanner(System.in); doublescore; score=scanner.nextDouble(); if(score<0||score>100) System.out.println("请输入0-100之间的数"); elseif(score<60) System.out.println("不及格"); elseif(score<70) System.out.println("及格"); elseif(score<80) System.out.println("中等"); elseif(score<90) System.out.println("良好"); elseif(score<=100) System.out.println("优秀"); }}§3.4循环结构如何有效地完成重复工作?循环结构是当循环条件为真时,不断地重复执行某些动作,即反复执行同一程序块,直到循环条件为假,结束循环,转向循环结构的出口。在现实世界的许多问题中需要用到循环控制,例如累加求和,迭代求根,求某月工资总和等。Java语言中实现循环结构的语句共有三种:while语句,do-while语句和for语句。2026/7/30李飞计算中心while语句形式while(表达式)语句

可以是复合语句,其中必须含有改变条件表达式值的语句。执行顺序先判断表达式的值,为true时,再执行语句。2026/7/30李飞计算中心例3.13:用迭代法求1-2+3-4…+(-1)n-1×n的值,n由用户输入importjava.util.Scanner;publicclasseg3_13{ publicstaticvoidmain(String[]args){ inti,n,sum,x; Stringname=newString(); Scannerscanner=newScanner(System.in); System.out.println("请输入相数n:"); n=scanner.nextInt(); i=1; sum=0; x=1; while(i<=n){ sum=sum+x*i++; x=-x; } System.out.println(sum); }}2026/7/30李飞计算中心do-while语句一般形式do语句while(表达式)可以是复合语句,其中必须含有改变条件表达式值的语句。执行顺序先执行循环体语句,后判断条件。

表达式为true时,继续执行循环体与while语句的比较:While语句执行顺序

先判断表达式的值,为true时,再执行语句2026/7/30李飞计算中心例3.14:一个饲养场引进一只刚出生的新品种兔子,这种兔子从出生的下一个月开始,每月新生一只兔子,新生的兔子也如此繁殖。如果所有的兔子都不死去,而在兔子达到用户指定的n只以上时,出栏。问第一次出栏需要多少个月?2026/7/30李飞——东北大学秦皇岛分校计算中心102/35importjava.util.Scanner;publicclasseg3_14{ publicstaticvoidmain(String[]args){ inti,n,s; Scannerscanner=newScanner(System.in); System.out.println("请输入兔子数n:"); n=scanner.nextInt(); s=1; if(n==1){ i=1; }else{ i=2; do{ s=2*s; i=i+1; }while(s<n); } System.out.println(i-1); }}2026/7/30李飞计算中心for语句语法形式for(表达式1;表达式2;表达式3)语句

2026/7/30李飞计算中心循环前先求解非0时执行循环体每次执行完循环体后求解例3.14importjava.util.Scanner;publicclasseg3_14_2{ publicstaticvoidmain(String[]args){ inti,n,sum,x; Scannerscanner=newScanner(System.in); System.out.println("请输入相数n:"); n=scanner.nextInt(); for(i=1,sum=0,x=1;i<=n;i++){ sum=sum+x*i; x=-x; } System.out.println(sum); }}2026/7/30李飞计算中心另一种写法importjava.util.Scanner;publicclasseg3_15{ publicstaticvoidmain(String[]args){ inti,n,sum,x; Scannerscanner=newScanner(System.in); System.out.println("请输入相数n:"); n=scanner.nextInt(); i=1; sum=0; x=1; for(;i<=n;i++){ sum=sum+x*i; x=-x; } System.out.println(sum); }}importjava.util.Scanner;publicclasseg3_16{ publicstaticvoidmain(String[]args){ inti,n,sum,x; Scannerscanner=newScanner(System.in); System.out.println("请输入相数n:"); n=scanner.nextInt(); i=1; sum=0;

x=1; for(;i<=n;){ sum=sum+x*i; x=-x;

i++; } System.out.println(sum); }}2026/7/30李飞——东北大学秦皇岛分校计算中心106/35循环嵌套例3.18输出类似下图的图形。publicclasseg3_18{ publicstaticvoidmain(String[]args){ intn=8; for(inti=1;i<=n;i++){ for(intj=0;j<i;j++){ System.out.print("*"); } System.out.println(); } }}2026/7/30李飞计算中心break和continue语句break语句使程序从循环体和switch语句内跳出,继续执行逻辑上的下一条语句。不宜用在别处。continue语句结束本次循环,接着判断是否执行下一次循环。2026/7/30李飞计算中心例3.20求2-n之间的素数importjava.util.Scanner;publicclasseg3_20{publicstaticvoidmain(String[]args){ intn; booleansushu; Scannerscanner=newScanner(System.in); System.out.println("显示素数的范围n:"); n=scanner.nextInt(); for(inti=2;i<=n;i++){ sushu=true; for(intj=2;j<=Math.sqrt(i);j++){

if(i!=2&&i%j==0){ sushu=false; break; } } if(sushu) System.out.println(i); }}}2026/7/30李飞——东北大学秦皇岛分校计算中心109/35例3.22:求0~n以内的奇数和。importjava.util.Scanner;publicclasseg3_22{ publicstaticvoidmain(String[]args){ intn,sum=0; Scannerscanner=newScanner(System.in); System.out.println("请输入n:"); n=scanner.nextInt(); for(inti=0;i<n;i++){ if(i%2==0) continue; sum=sum+i; } System.out.println(n+"以内的奇数和:"+sum); }}2026/7/30李飞——东北大学秦皇岛分校计算中心110/35EndThankYou!2026/7/30李飞——东北大学秦皇岛分校计算中心111/35第四章数组和字符串

Java程序设计本章主要内容

数组字符串小结2026/7/30李飞——计算中心113/30数组的概念数组是具有一定顺序关系的若干相同类型变量的集合体,组成数组的变量称为该数组的元素。这些元素可以是简单类型也可以是对象。在Java中,数组属于构造类型。用法等同于对象。需要声明,分配内存空间和释放内存空间。分配内存空间用new保留字完成,收回内存空间用垃圾回收器自动回收。七月26李飞计算中心114数组的特点一个数组中所有的元素是同一类型;数组中的元素是有顺序的;数组中的一个元素通过数组名和数组下标来确定。下标从0开始。2026/7/30李飞——东北大学秦皇岛分校计算中心115/35数组涉及的常用名词数组名。数组名应该符合Java语言标识符的命名规则。数组的类型。因为数组是用来存储相同类型的数据,因此数组的类型就是其所存储的元素的数据类型。数组的长度。数组的长度指的是数组中可以容纳的元素的个数,而不是数组所占用的字节数。116七月26李飞计算中心一维数组存储模型2026/7/30李飞——东北大学秦皇岛分校计算中心117/35一维数组的声明

一维数组声明的格式为:

类型数组名[];或

类型[]数组名;其中类型指出了数组中各元素的数据类型,包括基本类型和构造类型。数组名为一个标识符。“[]”指明了该变量是一个数组类型变量。当[]在数组名后时仅说明一个数组;当[]在数组名前时,后面的数组名列表中的所有标识符都是数组。例如: inta[];等价于 int[]a;例如:inta[],b[];等价于int[]a,b;七月26李飞计算中心118

一维数组的初始化初始化方式一直接给数组的每个元素赋上一个初始值,系统会自动根据所给的元素个数为数组分配一定的内存空间,一般在数组元素比较少时使用,一般形式为:

类型数组名[]={值1,值2,……,值n};例:声明并初始化一个长度为3的整型数组。

inta[]={1,2,3};七月26李飞计算中心119

一维数组的初始化初始化方式二使用new操作符为一个数组分配内存空间,然后为每个元素分别赋值,格式如下:

类型数组名[];

数组名=new类型[数组长度];或简化为

类型数组名[]=new类型[数组长度];例:初始化一个具有10个元素的整型数组。inta[];a[]=newint[10];Inta[]=newint[10];七月26李飞计算中心120一维数组的访问和赋值数组引用的赋值数组本身就是一种对象,因此我们可以把一个数组整体的赋值给另外一个数组。这种情况通常可以在两个相同类型的数组之间完成。char[]a1={'c','h','i','n','a'};char[]b1;b1=a1;数组元素的赋值数组的每个元素2026/7/30李飞——东北大学秦皇岛分校计算中心121/35求最值。例4.6:给定10个数,求其最大值。publicclasseg4_6{ publicstaticvoidmain(String[]args){ int[]a={3,6,4,1,7,8,34,5,32,2}; intmax=a[0]; for(inti=0;i<a.length;i++) if(max<a[i]) max=a[i]; System.out.println("最大值:"+max); }}2026/7/30李飞——东北大学秦皇岛分校计算中心122/35算法:排序给定一个数组,把数组按从大到小排序。擂台法:n各元素的数组,要排n-1轮每轮选出一个最大值放在数组的相应位置冒泡法:n各元素从前到后两两比较,大的在前,小的在后,否则交换。外循环执行i=len轮内循环比较次数len-1七月26李飞计算中心123/30排序例4.7:给定10个数,按从小到大排序。publicclasseg4_7{ publicstaticvoidmain(String[]args){ int[]a={3,6,4,1,7,8,34,5,32,2}; inttemp; for(inti=0;i<a.length-1;i++) for(intj=i+1;j<a.length;j++) if(a[i]>a[j]){ temp=a[i]; a[i]=a[j]; a[j]=temp; } for(inti=0;i<a.length;i++) System.out.print(a[i]+""); }}2026/7/30李飞——东北大学秦皇岛分校计算中心124/35冒泡法排序2026/7/30李飞——东北大学秦皇岛分校计算中心125/35每执行一轮排序操作,都把数组中的所有元素按顺序两两比较,在比较过程中永远保证大的(或小的)在前,当经过数组长度-1轮比较后,数组的顺序会自动排好。

假设我们有一个数组a,它包含5个元素为{3,2,7,1,6}。采用冒泡法排序的过程冒泡法排序2026/7/30李飞——东北大学秦皇岛分校计算中心

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论