1、第3章 Java语言程序控制语句,简单语句和复合语句 标准输入输出语句 3.1 选择语句 3.2 循环语句3.3 跳转语句 数 组3.4 断言3.5 Java程序示例,简单语句和复合语句,语句是程序的基本组成单位。1. 简单语句 变量说明语句、赋值语句、方法调用语句、空语句等被称为简单语句。 在Java语言中,一个简单语句总是以分号结尾的。例:int a=1,b; /变量说明语句 b=2; /赋值语句 ; /空语句 System.out.print(b); /方法调用语句,2. 复合语句 复合语句:由大括号“ ”括起来的语句。 复合语句的 内可放0n个语句,每条语句都应该符合Java语句的语法
2、。例. if (ab) min=b;,3.1.1 if 语句,条 件,布尔表达式,语句,if的后继语句,false,true,简单if语句的执行流程图,语法形式: if (布尔表达式) 语句1 else 语句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 /*请自己填写*/ ,练习: 编
3、写一程序,运行后从键盘输入二个整数,输出 其中的最小数。,课堂练习:求最小数,import java.io.*; public class Minpublic static void main(String args) throws IOException ,byte buf=new byte20; String str ; int a, b, min; System.out.println(请输入二个整数:); System.in.read(buf); /从键盘读一数字串存于buf中str=new String(buf); /buf 转换成字符串 a=Integer.parseInt(str
4、.trim(); /数字串转换成整数System.in.read(buf); str=new String(buf); b=Integer.parseInt(str.trim(); min=a;if (minb) min=b;System.out.println(最小数是+min);,3.1.2 switch 语句,switch语句根据测试表达式的结果来执行多个可能操作中的一个,它的语法形式如下:switch语句的流程如下所示。,switch(测试表达式) case 常量1:语句块1 break; case 常量2:语句块2 break; case 常量n:语句块n break; defaul
5、t: 语句块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语句为止
6、。(3)case子句中常量的类型必须与测试表达式的类型相容,而且每个case子句中常量的值必须是不同的。常量也可以是常量表达式(不含变量、方法的表达式)。,(4)default子句是可选的,当测试表达式的值与任一case子句中的值都不匹配时,就执行default后的语句。如果表达式的值与任一case子句中的值都不匹配且没有default子句,则程序不执行任何操作,而是直接跳出switch语句,进入后续程序段的执行。 (5)break语句用来在执行完一个case分支后,使程序跳出switch语句,执行switch语句的后续语句。因为case子句只是起到一个标号的作用,用来查找匹配的入口,然后从此
7、处开始执行,对后面的case子句的值不再进行比较,而是直接执行其后的语句。因此一般情况下,每个case分支后,要用break来终止后面的case分支语句的执行。,(6)case分支中包括多个执行语句时,可以不用花括号括起。(7)通过if-else语句可以实现switch语句所有的功能。但通常使用switch语句更简练,且可读性强,程序的执行效率也高。(8)if-else语句可以基于一个范围内的值或一个条件来进行不同的操作,但switch语句中的每个case子句都必须对应一个单值。,class SwitchDemo public static void main(String args) int
8、 month=7; String season; switch (month) case 12: case 1: case 2: season=冬季; break; case 3: case 4: case 5: season=春季; break;,case 6: case 7: case 8: season=夏季; break; case 9: case 10: case 11: season=秋季; break; default: season=错!; System.out.println(month+月是+season); ,ss,例. 用switch语句判断一个月份属于一年中哪个季节(
9、春、夏、秋、冬) (方法一),循环语句的作用是反复执行同一段代码直到满足结束条件。许多问题中需要用到循环控制。例如累加、累乘等。 Java循环语句有while、do-while和for三种。,3.2 循环语句,3.2.1 while语句3.2.2 do-while语句3.2.3 for 语句 循环嵌套,while语句形式如下: while (布尔表达式) 语句 while语句执行的过程为:执行while语句时,首先判断布尔表达式的值,当布尔表达式的值为true,则执行循环体,然后再判断条件,直到布尔表达式的值为false,停止执行语句。 使用while语句应注意以下两点:(1)该语句是先判断后
10、执行,若一开始条件就不成立,就不执行循环体。(2)在循环体内一定要有改变条件的语句,否则是死循环。while语句的流程图如下所示。,3.2.1 while 语句,布尔表达式,循环体,false,true,while语句流程图,class sum public static void main(String args) int n=100; /循环总数n=100 int i=1; /循环次数,初值为 float s=0; /和s为实型 while (i=n) /循环条件,循环总数100 s=s+1.0f/i; /s增加1/i, 1.0f表示是float型 i+; /循环次数加 System.ou
11、t.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.2 do-while 语句,布尔表达式,循环体,true,false,
12、Do- while语句流程图,do-while语句和while语句的不同之处是: do-while语句总是先进入循环,执行一次循环体后才检测循环条件,以决定是否继续循环,而while语句是先测试条件,再决定是否进入循环。所以,用do-while语句时,循环体至少执行一次。 例. 用do-while循环语句计算s=1+1/2+1/3+1/4+1/100。,class sum public static void main(String args) int i=1; /循环次数,初值为 float s=0; /和s为实型 do /循环条件 s=s+1.0f/i; /s增加1/i,1.0f表示是fl
13、oat型 i+; /循环次数加 while (i=100); /要循环100次 System.out.println(s= +s); ,for语句是循环的另一种表示形式。for语句的语法形式为: for(表达式1;表达式2;表达式3) 语句 for是for语句的关键字,语句为for语句的循环体,若有多个语句,需构成复合语句。 for语句中循环控制变量必须是有序类型,常用的有整型、字符型、布尔型。循环控制变量初值和终值通常是与控制变量类型相一致的一个常量,也可以是表达式。循环次数由初值和终值决定。执行过程:(1)按表达式1将初值赋给循环控制变量。(2)按表达式2判断循环是否成立,即判断控制变量的
14、值,3.2.3 for 语句,是否越过终值(未越过终值为条件成立,越过终值为条件不成立),若条件不成立、转步骤(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
15、),for语句使用的一些技巧: 有时,for语句在表达式1和表达式3的位置上需要包含多个表达式,这时可使用Java提供的逗号运算符来实现。,逗号运算符是用逗号“,” 分隔多个表达式, 被看作一个表达式。这样就可以在只能放一个表达式的地方放任意多个表达式,只须用逗号将它们分隔开。如: for ( i=1, j=10;ij;i+, j- ) 表达式1、表达式2及表达式3都可以为空语句(但分号不能省略),三者均为空的时候,相当于一个无限循环。如: for( ; ; ) , 注意点: 由于Java语句是用分号结束的,一个容易犯的错误是在for语句的圆括号后面加了一个不应有的分号。例如:下面的程序是想要
16、计算:1+2+.+99,在上例中,分号被放在循环体的前边,相当于for语句的循环体为空语句,其结果是for循环体什么都不处理。此程序的编译不会出任何错误,但当它运行时并不产生预期的结果。运行上面这个程序会得到如下输出结果: value=100 一般来说,在循环次数预知的情况下,用for语句比较方便,而while语句和do-while语句比较适合于循环次数不能预先确定的情况。,循环嵌套,一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多重循环。上述三种循环(while循环,do-while循环和for循环)语句之间可以相互嵌套使用。 例. 打印下面的数字
17、图案(每行打5个数字,每行各列数的值等于第一列数乘自己所在列号): 1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20 5 10 15 20 25,循环嵌套,public class Loop_Looppublic static void main(String args) int I,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列换行 ,例. 百鸡问题。 已知公
18、鸡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; 根据以上分析,可编程如下:,例.百鸡问题,public class Loop_Loop public static void main(String args) int I,J,K; System.out.printl
19、n(公鸡 母鸡 小鸡); 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.1 b
20、reak语句3.3.2 continue语句,break语句的一般语法格式为: break 标号; 其中,用“ ”括起的标号部分是可选的。 1.不带标号的情况 此时,break语句的功能是终止break所在的循环语句,转去执行其后的第一条语句。 对于不带标号的break语句,在执行时有两个特点: 1) 在有多重循环时,它只能使循环从本层的循环跳出来; 2) 跳出循环后转移到本层循环的下一个语句。,3.3.1 break 语句,public class breakout public static void main(String args) throws IOException int I,J
21、,K; char ch= ; 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.带标号的情
22、况 标号就是加在语句前面的一个合法的标识符,其后跟一个冒号。如下所示: 标号:语句 标号只是起到对语句标识的作用。 带标号的break语句的功能是使程序结束标号指明的外层循环语句,执行该外层循环语句的后继语句。标号应该定义在(要结束的)外层循环语句的开始处。 带标号的break语句的一种典型用法就是实现break语句所在的循环的外层循环语句(从内部直接跳出来)。 例如:,import java.io.*;class breakto_A public static void main(String args) throws IOException int i,j; char ch= ; A: /
23、标号A, 外层循环 for (i=1;i=2;i+ ) for ( j=1;j=1;j+) /内层循环 ch = (char) System.in.read(); if (ch = a) break A; /结束A对应的循环语句(外层循环) System.out.println(222); System.out.println(111); ,continue语句只能在循环语句中使用。它和break语句的区别是continue语句只结束所在循环语句的本次循环,而不是终止整个循环语句的执行;而break语句则是结束整个循环语句的执行。continue语句的一般语法格式为: continue 标号;
24、 其中,用“ ”括起的标号部分是可选的。1.不带标号的使用情况 此时,continue语句用来结束所在循环语句的本次循环,即跳过循环体中continue语句后面的语句,回到循环体的条件测试部分继续执行。 不带标号continue语句和不带标号的break语句类似,只能对所在一层的循环起作用。,3.3.2 continue 语句,public class continueto public static void main(String args) throws IOException int I,J; char ch= ; for (I=1;I=1;I+ ) /外层循环 for (J=1;J=
25、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语句的例子。,im
26、port java.io.*;class continue_A public static void main(String args) throws IOException int i,j; char ch= ; A: /标号A, 外层循环 for (i=1;i=2;i+ ) for ( j=1;j=1;j+) /内层循环 ch = (char) System.in.read(); if (ch = a) continue A; /结束A对应的循环语句的本次循环 System.out.println(本次内循环正常结束!); System.out.println(本次外循环正常结束! );
27、,1 一维数组 2 多维数组,数组是相同类型的数据元素按顺序组成的一种复合数据类型,元素在数组中的相对位置由下标来指明。数组中的每个元素通过数组名加下标进行引用。数组作为一种特殊的数据类型具有以下特点: (1) 一个数组中所有的元素应该是同一类型; (2) 数组中的元素是有顺序的; (3) 数组中的一个元素通过数组名和数组下标来确定。,数 组,1) 一维数组的说明与构造 与C+中不同的是,Java中数组要用new操作符实例化才可使用。所以建立一个数组需要两步: 声明数组 实例化 格式: 类型 数组名; (或: 类型 数组名;) 数组名 = new 类型数组长度; 说明: 第一行声明一个数组名,
28、并指明数组类型(可任何类型)和维数; 第二行使用new操作符构造数组并初始化(缺省值),即为数组元素分配存储空间,并为每个数组元素都赋予一个初值。,1.一维数组,上面的第二步实例化可以暂时不做,到需要时再完成。也可将上面的二步合并为一步: 类型 数组名 = new 类型数组长度;例: int list ; /声明一个整型数组 list = new int3; /为上面声明的数组分配3个整数元素 /的内存空间,并使每个元素初值为0 合并为一步: int list = new int3;,2) 数组的初始化 数组初始化就是为数组元素指定初始值。通常在构造数组时,Jave会使每个数组元素初始化为一个
29、默认值。但在许多情况下,并不希望数组的初值为默认值,此时,就需要用赋值语句来对数组进行初始化。 数组的初始化方式有两种: 一、像初始化简单类型一样自动初始化数组(不用new),即在说明数组的同时进行初始化(称为静态初始化); 二、仅用new创建数组,让它取缺省值,到以后再为元素赋值(称为动态初始化)。,例:int a =1,2,3,4,5; /静态初始化 int list = new int3; /动态初始化 上面的第一个语句声明并创建了数组a,并且为数组每个元素赋初值,结果为: a0=1,a1=2,a2,=3,a3=4,a4=5 上面的第二个语句仅声明并创建了数组a,并未给数组赋初值, 由Jave为数组元素默认初始化,于是得到三个元素并且都有初值: list0=0, list1=0, list2=0 注意:“”中所有数据的类型必须与数组的类型相同,
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。