




已阅读5页,还剩64页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章Java语言程序控制语句,简单语句和复合语句标准输入输出语句3.1选择语句3.2循环语句3.3跳转语句数组3.4断言3.5Java程序示例,简单语句和复合语句,语句是程序的基本组成单位。1.简单语句变量说明语句、赋值语句、方法调用语句、空语句等被称为简单语句。在Java语言中,一个简单语句总是以分号结尾的。例:inta=1,b;/变量说明语句b=2;/赋值语句;/空语句System.out.print(b);/方法调用语句,2.复合语句复合语句:由大括号“”括起来的语句。复合语句的内可放0n个语句,每条语句都应该符合Java语句的语法。例.if(ab)min=b;,3.1.1if语句,条件,布尔表达式,语句,if的后继语句,false,true,简单if语句的执行流程图,语法形式:if(布尔表达式)语句1else语句2注意:条件必须是布尔表达式。语句1、语句2可以是复合语句。例.if(a0)x1=(-b+(float)Math.sqrt(check)/(2*a);x2=(-b-(float)Math.sqrt(check)/(2*a);System.out.println(x1=+x1);System.out.println(x2=+x2);else/*请自己填写*/,练习:编写一程序,运行后从键盘输入二个整数,输出其中的最小数。,课堂练习:求最小数,importjava.io.*;publicclassMinpublicstaticvoidmain(Stringargs)throwsIOException,bytebuf=newbyte20;Stringstr;inta,b,min;System.out.println(请输入二个整数:);System.in.read(buf);/从键盘读一数字串存于buf中str=newString(buf);/buf转换成字符串a=Integer.parseInt(str.trim();/数字串转换成整数System.in.read(buf);str=newString(buf);b=Integer.parseInt(str.trim();min=a;if(minb)min=b;System.out.println(最小数是+min);,3.1.2switch语句,switch语句根据测试表达式的结果来执行多个可能操作中的一个,它的语法形式如下:switch语句的流程如下所示。,switch(测试表达式)case常量1:语句块1break;case常量2:语句块2break;case常量n:语句块nbreak;default:语句块n+1,测试表达式,语句块1,break,语句块2,break,break,语句块n,语句块n+1,后继语句,常量2,default,switch语句的流程图,常量1,常量n,switch语句中的每个“case常量:”称为一个case子句,代表一个case分支的入口。switch语句的注意点如下:(1)测试表达式必须是byte、char、short、int类型的表达式,而不能使用浮点类型或long类型,也不能为一个字符串。(2)switch语句将测试表达式的值依次与每个case子句中的常量值相比较。如果匹配成功,则执行该case子句中常量值后的语句,直到遇到break语句为止。(3)case子句中常量的类型必须与测试表达式的类型相容,而且每个case子句中常量的值必须是不同的。常量也可以是常量表达式(不含变量、方法的表达式)。,(4)default子句是可选的,当测试表达式的值与任一case子句中的值都不匹配时,就执行default后的语句。如果表达式的值与任一case子句中的值都不匹配且没有default子句,则程序不执行任何操作,而是直接跳出switch语句,进入后续程序段的执行。(5)break语句用来在执行完一个case分支后,使程序跳出switch语句,执行switch语句的后续语句。因为case子句只是起到一个标号的作用,用来查找匹配的入口,然后从此处开始执行,对后面的case子句的值不再进行比较,而是直接执行其后的语句。因此一般情况下,每个case分支后,要用break来终止后面的case分支语句的执行。,(6)case分支中包括多个执行语句时,可以不用花括号括起。(7)通过if-else语句可以实现switch语句所有的功能。但通常使用switch语句更简练,且可读性强,程序的执行效率也高。(8)if-else语句可以基于一个范围内的值或一个条件来进行不同的操作,但switch语句中的每个case子句都必须对应一个单值。,classSwitchDemopublicstaticvoidmain(Stringargs)intmonth=7;Stringseason;switch(month)case12:case1:case2:season=冬季;break;case3:case4:case5:season=春季;break;,case6:case7:case8:season=夏季;break;case9:case10:case11:season=秋季;break;default:season=错!;System.out.println(month+月是+season);,ss,例.用switch语句判断一个月份属于一年中哪个季节(春、夏、秋、冬)(方法一),循环语句的作用是反复执行同一段代码直到满足结束条件。许多问题中需要用到循环控制。例如累加、累乘等。Java循环语句有while、do-while和for三种。,3.2循环语句,3.2.1while语句3.2.2do-while语句3.2.3for语句循环嵌套,while语句形式如下:while(布尔表达式)语句while语句执行的过程为:执行while语句时,首先判断布尔表达式的值,当布尔表达式的值为true,则执行循环体,然后再判断条件,直到布尔表达式的值为false,停止执行语句。使用while语句应注意以下两点:(1)该语句是先判断后执行,若一开始条件就不成立,就不执行循环体。(2)在循环体内一定要有改变条件的语句,否则是死循环。while语句的流程图如下所示。,3.2.1while语句,布尔表达式,循环体,false,true,while语句流程图,classsumpublicstaticvoidmain(Stringargs)intn=100;/循环总数n=100inti=1;/循环次数,初值为floats=0;/和s为实型while(i=n)/循环条件,循环总数100s=s+1.0f/i;/s增加1/i,1.0f表示是float型i+;/循环次数加System.out.println(s=+s);,例.用while循环语句计算s=1+1/2+1/3+1/100。,Java还提供了另一个与while语句类似的语句do-while语句。do-while语句的语法形式如下:do语句while(布尔表达式);do-while语句执行的过程为:先执行一次循环体中的语句,然后测试布尔表达式的值,如果布表达式的值为真,那就继续执行循环体,do-while语句将不断地测试布尔表达式的值并执行循环体中的内容,直到布尔表达式的值为假为止。do-while语句的流程图如下所示。,3.2.2do-while语句,布尔表达式,循环体,true,false,Do-while语句流程图,do-while语句和while语句的不同之处是:do-while语句总是先进入循环,执行一次循环体后才检测循环条件,以决定是否继续循环,而while语句是先测试条件,再决定是否进入循环。所以,用do-while语句时,循环体至少执行一次。例.用do-while循环语句计算s=1+1/2+1/3+1/4+1/100。,classsumpublicstaticvoidmain(Stringargs)inti=1;/循环次数,初值为floats=0;/和s为实型do/循环条件s=s+1.0f/i;/s增加1/i,1.0f表示是float型i+;/循环次数加while(i=100);/要循环100次System.out.println(s=+s);,for语句是循环的另一种表示形式。for语句的语法形式为:for(表达式1;表达式2;表达式3)语句for是for语句的关键字,语句为for语句的循环体,若有多个语句,需构成复合语句。for语句中循环控制变量必须是有序类型,常用的有整型、字符型、布尔型。循环控制变量初值和终值通常是与控制变量类型相一致的一个常量,也可以是表达式。循环次数由初值和终值决定。执行过程:(1)按表达式1将初值赋给循环控制变量。(2)按表达式2判断循环是否成立,即判断控制变量的值,3.2.3for语句,是否越过终值(未越过终值为条件成立,越过终值为条件不成立),若条件不成立、转步骤(6)。(3)若条件成立,则执行循环体。(4)按表达式3修改控制变量。对于递增型为原控制变量值的后续;对于递减型为原控制变量值的前导。(5)返回步骤(2)。(6)结束循环。,求解表达式1,表达式2,循环体,求解表达式3,for语句的下一语句,false,true,for语句的流程图,例.求Fibonacci数列的前40个数项。Fibonacci数列:1,1,2,3,5,8,13,21,34,从数列看到:F1=1(n=1)F2=1(n=2)Fn=Fn-1+Fn-2(n3),for语句使用的一些技巧:有时,for语句在表达式1和表达式3的位置上需要包含多个表达式,这时可使用Java提供的逗号运算符来实现。,逗号运算符是用逗号“,”分隔多个表达式,被看作一个表达式。这样就可以在只能放一个表达式的地方放任意多个表达式,只须用逗号将它们分隔开。如:for(i=1,j=10;ij;i+,j-)表达式1、表达式2及表达式3都可以为空语句(但分号不能省略),三者均为空的时候,相当于一个无限循环。如:for(;),注意点:由于Java语句是用分号结束的,一个容易犯的错误是在for语句的圆括号后面加了一个不应有的分号。例如:下面的程序是想要计算:1+2+.+99,在上例中,分号被放在循环体的前边,相当于for语句的循环体为空语句,其结果是for循环体什么都不处理。此程序的编译不会出任何错误,但当它运行时并不产生预期的结果。运行上面这个程序会得到如下输出结果:value=100一般来说,在循环次数预知的情况下,用for语句比较方便,而while语句和do-while语句比较适合于循环次数不能预先确定的情况。,循环嵌套,一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多重循环。上述三种循环(while循环,do-while循环和for循环)语句之间可以相互嵌套使用。例.打印下面的数字图案(每行打5个数字,每行各列数的值等于第一列数乘自己所在列号):12345246810369121548121620510152025,循环嵌套,publicclassLoop_Looppublicstaticvoidmain(Stringargs)intI,J,K;/I表示行号,J表示列号,K存临时计算的值for(I=1;I=5;I+)for(J=1;J=5;J+)K=I*J;System.out.print(K+);System.out.println();/每打5列换行,例.百鸡问题。已知公鸡5元1只,母鸡3元一只,小鸡1元3只,要求用100元刚好买100只鸡,问有多少种采购方案。分析:设变量I、J、K分别代表公鸡数、母鸡数及小鸡数,则应满足下列一些条件:I+J+K=100(只),I,J,K0;5I+3J+K/3=100(元);若用100元全部买公鸡,最多只能买20只,所以I20;同样地母鸡最多只能买33只,所以J33;而小鸡数目就是100-I-J;根据以上分析,可编程如下:,例.百鸡问题,publicclassLoop_Looppublicstaticvoidmain(Stringargs)intI,J,K;System.out.println(公鸡母鸡小鸡);for(I=0;I=20;I+)for(J=0;J=33;J+)K=100-I-J;if(5*I+3*J+K/3.0=100)/注意“K/3.0”System.out.println(I+J+K);,循环语句正常结束是在循环条件表达式的值变为false的时候,但有时即使测试的条件为true,也希望循环立即终止,这时可以用跳转语句break或continue语句实现。continue语句只能用于循环语句中。break可用于switch语句中,亦可用于循环语句中注意:Java中不支持goto语句。,3.3跳转语句,3.3.1break语句3.3.2continue语句,break语句的一般语法格式为:break标号;其中,用“”括起的标号部分是可选的。1.不带标号的情况此时,break语句的功能是终止break所在的循环语句,转去执行其后的第一条语句。对于不带标号的break语句,在执行时有两个特点:1)在有多重循环时,它只能使循环从本层的循环跳出来;2)跳出循环后转移到本层循环的下一个语句。,3.3.1break语句,publicclassbreakoutpublicstaticvoidmain(Stringargs)throwsIOExceptionintI,J,K;charch=;for(I=1;I=1;I+)/最外层循环for(J=1;J=2;J+)/第二层循环for(K=1;K=2;K+)/内层循环ch=(char)System.in.read();if(ch=c)break;/结束内层循环语句System.out.println(333);if(ch=b)break;/结束第二层循环语句System.out.println(222);if(ch=a)break;/结束最外层循环语句System.out.println(111);,例.不带标号的break语句,2.带标号的情况标号就是加在语句前面的一个合法的标识符,其后跟一个冒号。如下所示:标号:语句标号只是起到对语句标识的作用。带标号的break语句的功能是使程序结束标号指明的外层循环语句,执行该外层循环语句的后继语句。标号应该定义在(要结束的)外层循环语句的开始处。带标号的break语句的一种典型用法就是实现break语句所在的循环的外层循环语句(从内部直接跳出来)。例如:,importjava.io.*;classbreakto_Apublicstaticvoidmain(Stringargs)throwsIOExceptioninti,j;charch=;A:/标号A,外层循环for(i=1;i=2;i+)for(j=1;j=1;j+)/内层循环ch=(char)System.in.read();if(ch=a)breakA;/结束A对应的循环语句(外层循环)System.out.println(222);System.out.println(111);,continue语句只能在循环语句中使用。它和break语句的区别是continue语句只结束所在循环语句的本次循环,而不是终止整个循环语句的执行;而break语句则是结束整个循环语句的执行。continue语句的一般语法格式为:continue标号;其中,用“”括起的标号部分是可选的。1.不带标号的使用情况此时,continue语句用来结束所在循环语句的本次循环,即跳过循环体中continue语句后面的语句,回到循环体的条件测试部分继续执行。不带标号continue语句和不带标号的break语句类似,只能对所在一层的循环起作用。,3.3.2continue语句,publicclasscontinuetopublicstaticvoidmain(Stringargs)throwsIOExceptionintI,J;charch=;for(I=1;I=1;I+)/外层循环for(J=1;J=2;J+)/内层循环ch=(char)System.in.read();if(ch=b)continue;/结束内层循环的本次循环System.out.println(没有结束内循环!);if(ch=a)continue;/结束外层循环的本次循环System.out.println(没有结束外循环!);,例:不带标号的continue语句,2.带标号的使用情况此时,continue语句跳过标号所指的循环语句所有余下部分语句,回到标号所指循环语句块的条件测试部分继续执行。注意标号应该定义在外层循环语句的开始处。下面是一个使用带标号的continue语句的例子。,importjava.io.*;classcontinue_Apublicstaticvoidmain(Stringargs)throwsIOExceptioninti,j;charch=;A:/标号A,外层循环for(i=1;i=2;i+)for(j=1;j=1;j+)/内层循环ch=(char)System.in.read();if(ch=a)continueA;/结束A对应的循环语句的本次循环System.out.println(本次内循环正常结束!);System.out.println(本次外循环正常结束!);,1一维数组2多维数组,数组是相同类型的数据元素按顺序组成的一种复合数据类型,元素在数组中的相对位置由下标来指明。数组中的每个元素通过数组名加下标进行引用。数组作为一种特殊的数据类型具有以下特点:(1)一个数组中所有的元素应该是同一类型;(2)数组中的元素是有顺序的;(3)数组中的一个元素通过数组名和数组下标来确定。,数组,1)一维数组的说明与构造与C+中不同的是,Java中数组要用new操作符实例化才可使用。所以建立一个数组需要两步:声明数组实例化格式:类型数组名;(或:类型数组名;)数组名=new类型数组长度;说明:第一行声明一个数组名,并指明数组类型(可任何类型)和维数;第二行使用new操作符构造数组并初始化(缺省值),即为数组元素分配存储空间,并为每个数组元素都赋予一个初值。,1.一维数组,上面的第二步实例化可以暂时不做,到需要时再完成。也可将上面的二步合并为一步:类型数组名=new类型数组长度;例:intlist;/声明一个整型数组list=newint3;/为上面声明的数组分配3个整数元素/的内存空间,并使每个元素初值为0合并为一步:intlist=newint3;,2)数组的初始化数组初始化就是为数组元素指定初始值。通常在构造数组时,Jave会使每个数组元素初始化为一个默认值。但在许多情况下,并不希望数组的初值为默认值,此时,就需要用赋值语句来对数组进行初始化。数组的初始化方式有两种:一、像初始化简单类型一样自动初始化数组(不用new),即在说明数组的同时进行初始化(称为静态初始化);二、仅用new创建数组,让它取缺省值,到以后再为元素赋值(称为动态初始化)。,例:inta=1,2,3,4,5;/静态初始化intlist=newint3;/动态初始化上面的第一个语句声明并创建了数组a,并且为数组每个元素赋初值,结果为:a0=1,a1=2,a2,=3,a3=4,a4=5上面的第二个语句仅声明并创建了数组a,并未给数组赋初值,由Jave为数组元素默认初始化,于是得到三个元素并且都有初值:list0=0,list1=0,list2=0注意:“”中所有数据的类型必须与数组的类型相同,3)数组元素的使用数组被实例化后,就可以在程序中像使用任何变量一样来使用数组元素,即可以在任何允许使用变量的地方使用数组元素。数组元素的标识方式为:数组名下标例:a3、bi、ci*5下标的取值范围是从0开始,一直到数组的长度减1。对于上面例子中的list数组来说,它有3个元素,分别为:list0、list1、list2(注意:不存在list3)注意:1.下标只能为byte、short、int或char类型,不能为long;2.Java在程序编译时并不对数组下标进行越界检查,但在运行时会对数组下标进行越界检查,以保证安全性。,Java中的数组实际是Array类的一个对象,定义一个数组实际就是创建Array类的一个对象。该类中还有一些属性和方法供数组使用。如对于每个数组都有一个属性:length,它指明数组的长度(即元素个数),由程序自动计算。例如,list.length指明了数组list的长度。Java中的数组还可利用数组名来互相赋值,但要注意,这种赋值实际是定义一个别名,即是同一数组的不同名字的引用。例如:inta=2,4,6,b;b=a;System.out.println(b1);/输出4b1=7;System.out.println(a1);/输出7,4)一维数组应用示例例.编写一个程序,在其中建立一个有10个整数的数组,运行后从键盘输入10个整数放入数组,然后输出其中的最大数。,importjava.io.*;publicclassArray1publicstaticvoidmain(Stringargs)throwsIOExceptioninti,max,a=newint10;bytebuf=newbyte20;Stringstr;,程序如下:,System.out.println(请输入10个数:);for(i=0;i=9;i+)/输入10个数,以回车分隔System.in.read(buf);str=newString(buf);ai=Integer.parseInt(str.trim();max=a0;for(i=1;i=9;i+)/找最大数if(maxai)max=ai;System.out.println(最大数是+max);,与C+中类似,在Java中,当一维数组中的类型又是一个一维数组时,就构成了二维数组,以此类推,可构成更高维的数组。所以,多维数组是通过对一维数组的嵌套声明来实现的。多维数组与一维数组一样,需要声明并实例化后才可使用。下面主要以二维数组为例来说明用法。1)二维数组的说明与创建二维数组说明的格式为:类型数组名;(或类型数组名;)例如:intintArray;与一维数组一样,此时还没有为数组元素分配内存空间,还需要用new关键字来创建数组,然后才可以使用该数组的每个元素。,2.多维数组,对二维数组来说,分配内存空间有下面几种方法。直接为每一维分配空间,如:inta=newint23;该语句创建了一个二维数组a,其较高一维含两个元素,每个元素为由3个整型数构成的一维整型数组。如下所示:,从最高维开始,分别为每一维分配空间,如:,intb=newint2;/最高维含2个元素,每/个元素为一个整型数组b0=newint3;/最高维第一个元素是一个长度/为3的整型数组b1=newint5;/最高维第二个元素是一个长度/为5的整型数组下图为该数组的示意图。,注意:在使用运算符new来分配内存时,对于多维数组至少要给出最高维的大小。如果在程序中出现inta2=newint;编译器将要提示如下错误:Arraydimensionmissing2)二维数组元素的初始化二维数组元素的初始化同一维数组一样有两种方式:(1)在说明数组的同时进行初始化。(2)仅用new创建数组,让它取缺省值,到以后再为元素赋值(称为动态初始化)。,例:inta=1,2,3,4,5,6;该语句声明了一个有6个元素的二维数组并初始化为:a00=1a10=2,a11=3a20=4,a21=5,a22=63)二维数组元素的引用对二维数组中每个元素,其引用方式为:数组名下标1下标2其中下标1、下标2为非负的整型常数或表达式,如:a23、cci+2j*3(i,j为整型)等。同样,每一维的下标取值都从0开始。,4)二维数组应用示例例.编写一个程序,计算4行4列整数矩阵的对角线元素之和。程序如下:,publicclassArray2publicstaticvoidmain(Stringargs)inti,sum=0;inta=5,3,1,2,2,4,6,8,3,5,7,1,6,4,9,2;for(i=0;i=3;i+)sum+=aii;System.out.println(sum);,示例1:输出加法表,+1234567891234567891023456789101134567891011124567891011121
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 数控水射流切割机操作工基础知识考核试卷及答案
- 基因治疗可行性评估-洞察及研究
- 网络运维安全员考试题库及答案解析
- 委托物业管理服务合同
- 2025届新高三英语组心理辅导研讨会心得体会
- 测绘档案数据更新岗位职责说明
- 媒体市场推广战略合作协议书
- 屠宰场承包经营协议
- 塔吊安装安全协议书合同
- 地质承包合同协议书模板
- 图形动画毕业设计
- 工会劳动竞赛课件
- 2025-2026学年苏教版小学数学五年级上册教学计划及进度表
- 2025年建筑工程-安全员C证-安全员(C证·上海)历年参考题库典型考点含答案解析
- 光伏项目施工组织设计方案
- 2025政府采购评审专家入库题库与答案
- 仪表安全知识培训课件
- 2025年三级老年人能力评估师考试题库(附答案)
- 婴幼儿营养与喂养理论知识考核试题及答案
- 工程设计图纸技术交底
- 学科交叉教学中存在的问题及改进措施
评论
0/150
提交评论