




已阅读5页,还剩82页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java程序设计第三讲数组和流控制,数组,数组定义数组是有序数据的集合,数组中的每个元素具有相同的数据类型。一维数组的定义方式为:typearrayName;其中类型(type)可以Java中任意的数据类型,包括简单类型,组合类型,数组名arrayName为一个合法的标识符,指明该变量是一个数组类型变量例如:intintArray,声明了一个整型数组,数组中的每个元素为整型数据,数组名和下标来唯一地确定数组中的元素。数组有一维数组和多维数组。与C、C+不同,Java在数组的定义中并不为数组元素分配内存,因此中不用指出数组中元素个数,即数组长度在Java中,数组是对象。,数组定义,可以有任何类型的数组,数组元素可以是基本类型,也可以是类类型,当然还可以是数组。例chars;Pointpoints;s的每个元素都是char类型的,points的每个元素都是类Point类型的。,等价的数组说明,chars;Pointpoints;这两行说明与前面的说明完全等价。,创建数组,和所有对象一样,程序中使用new关键字创建数组,方括号中的数字表示数组元素个数。例:s=newchar20;points=newPoint100;points0=newPoint();points1=newPoint();Java中没有静态的数组定义,数组的内存都是通过new动态分配的。,数组创建后就不能改变它的大小,但是可以使用相同的引用变量指向一个全新的数组。intelements=newint6;elements=newint10;,Point类定义如下:classPointintx,y;Point(intx1,inty1)x=x1;y=y1;Point()this(0,0);,图说明,说明语句:Pointpoints;执行完毕,系统为变量points分配一个引用空间。说明语句:points=newPoint100;执行完毕,系统在内存中分配一个数组对象并把数组引用赋给变量points说明语句:points1=newPoint();执行完毕,数组的状态图(b)变为图(c)。,数组说明与数组创建可以合并:chars=newchar20;Pointpoints=newPoint100;数组变量的类型说明:例如:Objectpoints;points=newPoint100;例如:Pointpoints;points=newObject100;,正确,错误,数组边界,在Java中,数组下标从0开始。数组中的元素个数length是数组中唯一的数据成员变量。使用new创建数组时系统自动给length赋值。数组一旦创建完毕,其大小就固定下来。程序运行时使用length进行数组边界检查。如果发生越界访问,则抛出一个异常。,示例,intlist=newint10;for(inti=0;ilist.length;i+)/进行相应处理的代码循环的结束条件中使用list.length,而不是常数10。好处:不会引起数组下标越界,使程序更健壮,修改更方便。,数组初始化,数组名加上下标可以表示数组元素。数组的下标范围为0到length-1。当创建一个数组时,每个元素都被初始化。在没有给数组元素赋值前,默认值:数值类型为0,逻辑类型为false,字符类型为0,对象类型为null。Java允许用初值来创建数组。,示例,inta=11,12,13,14,15,16;doubleb=1.1,1.2,1.3,1.4,1.5,1.6,1.7;Stringnames=Georgianna;Jen;Simon;Tom;,数组运算例子,publicclassArrayTestpublicstaticvoidmain(Stringargs)inti;inta=newint5;for(i=0;i5;i+)ai=i;for(i=a.length-1;i=0;i-)System.out.println(a+i+=+ai);,数组运算例子,运行结果如下:C:javaArrayTesta4=4a3=3a2=2a1=1a0=0该程序对数组中的每个元素赋值,然后按逆序输出。,数组运算例子,Fibonacci数列的定义为:F1=F2=1,Fn=Fn-1+Fn-2(n=3),求数列的前十个数。publicclassFibonaccipublicstaticvoidmain(Stringargs)inti;intf=newint10;f0=f1=1;for(i=2;i10;i+)fi=fi-1+fi-2;for(i=1;i=10;i+)System.out.println(F+i+=+fi-1);,运行结果为:C:javaFibonacciF1=1F2=1F3=2F4=3F5=5F6=8F7=13F8=21F9=34F10=55,多维数组,Java可以建立数组的数组(的数组),由此得到多维数组。一般来讲,n维数组是n-1维数组的数组。说明多维数组时使用类型及多对方括号。例如:inta;intb;,二维数组,创建二维数组的一般格式为:typearrayN=newtypearrleng1;arrayN0=newtypearrleng2;arrayN1=newtypearrleng2;.arrayNarrleng1-1=newtypearrleng2;,二维矩阵数组说明,二维矩阵数组的一般说明格式为typearrayName=newtypelength1length2;其中,arrayName是数组名,length1和length2分别为数组各维的大小,type是数组元素的类型。,与一维数组一样,对数组元素也没有分配内存空间,需要使用运算符new来分配内存,然后才可以访问每个元素。对高维数组来说,分配内存空间有下面几种方法。,直接为每一维分配空间例intmatrix=newint45;,将创建一个有4个数组的数组,每个数组中又有5个整数,即4行5列的整数矩阵。,等价于:intmatrix=newint4;for(intj=0;jmatrix.length;j+)matrixj=newint5;先指定了一维行的数目为4,每一行生成列的数目为5,从最高维开始,分别为每一维分配空间,先指定行数在指定列数inta=newint2;a0=newint3;a1=newint3;,二维数组的初始化,多维数组的初始化与一维数组类似,以二维数组静态初始化为例:inta=2,3,1,5,3,4;它的形式如下:231534使用两个下标可以访问数组中的任一元素。,正确的说明示例,inta1=newint23;inta2=newint2;inta3=newint46;,不正确的说明示例,interrarr123;interrarr2=newint4;interrarr34=newint34;,不允许静态说明数组。,数组的维数说明顺序应从高维到低维。,数组维数的指定只能出现在new运算符之后。,对二维数组中每个元素,引用方式为:arrayNameindex1index2其中index1、index2为行下标和列下表,每一维的下标都从0开始,最大值为每一维的长度减1二维数组的length属性,数组名.length表示数组的行数,数组名行下表.length表示该行的元素个数。,流控制,语句是Java的最小执行单位,语句间以分号(;)作为分隔符。,表达式语句,下面是一些表达式语句:customer1=newCustomer();point2=newPoint();x=12;x+;,表达式语句,方法调用通常返回一个值,一般用在表达式中。有的方法调用可直接当作语句。如:System.out.println(“HelloWorld!”);,块,块是一对花括号“”和“”括起来的语句组。如,Pointpoint1=newPoint();intx=point1.x;第一个块是空块,其中不含任何语句。第二个块含两条语句。方法体是一个块。块还用在流控制的语句中,如if语句、switch语句及循环语句。,与C、C+相同,Java程序通过流控制来执行程序流,完成一定语句组成的。语句可以是单一的一条语句(如c=a+b;),也可以复合语句。下面我们分别来介绍Java中的流控制语句,包括1.分支语句:if-else,break,switch.2.循环语句:while,do-while,for,continue.,分支语句,分支语句根据一定的条件,动态决定程序的流程方向,从程序的多个分支中选择一个或几个来执行。分支语句共有两种:if语句和switch语句。,分支语句,if语句的基本语法是:if(逻辑表达式)语句1;else语句2;if语句中的else子句是可选的。if关键字之后的逻辑表达式必须得到一个逻辑值,不能以数值来代替。,1.if语句,if语句的含义,当逻辑表达式结果为true时,执行语句1,然后继续执行if后面的语句。当逻辑表达式为false时,如果有else子句,则执行语句2,否则跳过该if语句,继续执行后面的语句。语句1和语句2既可以是单语句,也可以是语句块。,每个单一的语句后都必须有分号。语句1,语句2可以为复合语句,这时要用大括号。建议对单一的语句也用大括号括起,这样程序的可读性强,而且有利于程序的扩充(可以在其中填加新的语句)。大括号外面不加分号。,例,intcount;count=getCount();/程序中定义的一个方法if(count0)System.out.println(“Error:countvalueisnegative!”);elseSystem.out.println(“Therewillbe”+count+“peopleforlunchtoday.”);,if-else语句的一种特殊形式为:if(expression1)statement1elseif(expression2)statement2elseif(expressionM)statementMelsestatementN,else子句不能单独作为语句使用,它必须和if配对使用。else总是与离它最近的if配对,if语句例子,例:比较两个数的大小,并按从小到大的次序输出。publicclassCompareTwopublicstaticvoidmain(Stringargs)doubled1=23.4;doubled2=35.1;If(d2=d1)System.out.println(d2+=+d1);elseSystem.out.println(d1+=+d2);,运行结果为:C:javaCompareTwo35.1=23.4,2.switch语句,switch语句是多重分支语句,它的语法格式是:switch(表达式)casec1:语句组1;break;casec2:语句组2;break;caseck:语句组k;break;default:语句组;break;,2.switch语句,表达式的计算结果必须是int型或字符型,即是int型赋值相容的。当用byte,short或char类型时,要进行提升。,2.switch语句,switch语句不允许使用浮点型或long型表达式。c1,c2,ck是int型或字符型常量。default子句是可选的,并且,最后一个break语句完全可以不写。,switch语句的语义,计算表达式的值,用该值依次和c1,c2,ck相比较。如果该值等于其中之一,那么执行其后的语句组,直到遇到break语句跳到switch之后的语句。如果没有相匹配的值,则执行default之后的语句。,switch语句中各ci之后的语句既可以是单语句,也可以是语句组。不论执行哪个分支,程序流都会顺序执行下去,直到遇到break语句为止。,switch语句的语义,2.switch语句示例,例:/colorNum是整型变量switch(colorNum)case0:setBackground(Color.red);break;case1:setBackground(Color.green);break;default:setBackground(Color.black);break;,2.switch语句示例,classSwitchTestpublicstaticvoidmain(Stringargs)charch=args0.charAt(0);switch(ch)case0:case1:case2:case3:case4:case5:case6:case7:case8:case9:System.out.println(“Thecharacterisdigit”+ch);break;,casea:caseb:casec:cased:casee:casef:caseg:caseh:casei:casej:casek:casel:casem:casen:caseo:casep:caseq:caser:cases:caset:caseu:casev:casew:casex:casey:casez:System.out.println(“Thecharislowercaseletter”+ch);break;,caseA:caseB:caseC:caseD:caseE:caseF:caseG:caseH:caseI:caseJ:caseK:caseL:caseM:caseN:caseO:caseP:caseQ:caseR:caseS:caseT:caseU:caseV:caseW:caseX:caseY:caseZ:System.out.println(“Thecharisuppercaseletter”+ch);break;,default:System.out.println(“Thecharacter”+ch+”isneitheradigitnoraletter.”);,2.switch语句示例,switch语句和if语句可以互相代替。例:if(colorNum=0)setBackground(Color.red);elseif(colorNum=1)setBackground(Color.green);elsesetBackground(Color.black);,例.根据考试成绩的等级打印出百分制分数段。publicclassGradeLevelpublicstaticvoidmain(Stringargs)System.out.println(n*firstsituation*);chargrade=C;/normaluseswitch(grade)caseA:System.out.println(grade+is85100);break;caseB:System.out.println(grade+is7084);break;caseC:System.out.println(grade+is6069);break;caseD:System.out.println(grade+is60);break;default:System.out.println(inputerror);System.out.println(n*secondsituation*);,grade=A;createrrorwithoutbreakstatementswitch(grade)caseA:System.out.println(grade+is85100);caseB:System.out.println(grade+is7084);caseC:System.out.println(grade+is6069);caseD:System.out.println(grade+is60);default:System.out.println(inputerror);System.out.println(n*thirdsituation*);,grade=B;severalcasewithsameoperationswitch(grade)caseA:caseB:caseC:System.out.println(grade+is=60);break;caseD:System.out.println(grade+is60);break;default:System.out.println(inputerror);,运行结果为C:javaGradeLevel*firstsituation*Cis6069*secondsituation*Ais85100Ais7084Ais6069Ais60inputerror*thirdsituation*Bis=60,循环语句,循环语句控制程序流多次执行一段程序。Java语言提供三种循环语句:for语句、while语句和do-while语句。,1.for语句,for语句的语法格式是:for(初始语句;逻辑表达式;迭代语句)语句;初始语句和迭代语句中可以含有多个语句,各语句间以逗号分隔。for语句括号内的三部分都是可选的,逻辑表达式为空时,默认规定为恒真,for语句的语义,先执行初始语句,判断逻辑表达式的值,当逻辑表达式为真时,执行循环体语句,执行迭代语句,然后再去判别逻辑表达式的值。这个过程一直进行下去,直到逻辑表达式的值为假时,循环结束,转到for之后的语句。for语句中定义的循环控制变量只在该块内有效。,循环语句示例,for(inti=0;i3;i+)System.out.println(“Areyoufinishedyet?”);System.out.println(“Finally!”);,结果,Areyoufinishedyet?Areyoufinishedyet?Areyoufinishedyet?Finally!,循环语句示例,for(;)System.out.println(“Alwaysprint!”);该语句等价于:for(;true;)System.out.println(“Alwaysprint!”);,这段循环不会停止。,2.while循环,while循环的语法是:while(逻辑表达式)语句;while语句中的逻辑表达式不能用数值来代替。,2.while循环,while语句的语义是:计算逻辑表达式,当逻辑表达式为真时,重复执行循环体语句,直到逻辑表达式为假时结束。,while语句的语义,如果第一次检查时逻辑表达式为假,则循环体语句一次也不执行。如果逻辑表达式始终为真,则循环不会终止。,while循环示例,例:inti=0;while(i3)System.out.println(“Areyoufinishedyet?”);i+;System.out.println(“Finally!”);,3.do循环语句,do语句的语法格式是:do语句;while(逻辑表达式);,3.do循环语句,do语句的语义是:首先执行循环体语句,然后判定逻辑表达式的值,当表达式为真时,重复执行循环体语句,直到表达式为假时结束。不论逻辑表达式的值是真是假,do循环中的循环体都至少执行一次。,do循环示例,inti=0;doSystem.out.println(“Areyoufinishedyet?”);i+;while(i3);System.out.println(“Finally!”);,循环语句,for、while及do语句可互相替代。例如:do语句1;while(逻辑表达式);等价于:语句1;while(逻辑表达式)语句1;,例:分别用while、do-while和for语句实现累计求和。publicclassSumpublicstaticvoidmain(Stringargs)System.out.println(n*whilestatement*);intn=10,sum=0;initializationwhile(n0)terminationsum+=n;bodyn-;iterationSystem.out.println(sumis+sum);,System.out.println(n*do_w
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农业行业高级人才面试题库
- 初二数学下册各章思维导图
- 高级人才招聘:会员制面试题目及答案衍生职业岗位选择技巧
- 细胞染色原理
- 药品不良反应复核管理体系建设
- 汽轮发动机讲解课件
- 微纳米技术制造
- 人体巨噬细胞
- 选举人团制度解析
- 五老活动实施方案
- 《采购部相关培训》课件
- 围手术期的ERAS营养护理管理
- 高处作业非标吊篮专项施工方案
- 2024至2030年中国品牌战略咨询服务市场现状研究分析与发展前景预测报告
- 2022版新《物理》义务教育课程标准教师培训测试题附答案
- 辽宁省丹东市2023-2024学年八年级下学期期末数学试卷(含答案)
- TSG+11-2020锅炉安全技术规程
- 从高考改卷谈对物理教学的几点启示
- DB32-T 4757-2024 连栋塑料薄膜温室建造技术规范
- 个人征信查询授权书范本
- 2024新版实习律师协议
评论
0/150
提交评论