1、,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,人民邮电出版社,2,Java,语言基础语法,Java,程序设计,第,章,2.2,输入输出,2.3,流程,控制,2.4,数组,2.1,数据类型,和运算,符号,2.5,小结,C,目录,ONTENTS,2.1.1 Java,数据类型,在计算机中存储和处理数据要区分类型,因为不同类型的数据在计算机中的存储和处理方式不同,。,Java,语言本身定义的数据类型称为基本数据类型
2、。,在基本数据类型的基础上,还可以定义其它数据类型,称为自定义类型,如后面讲到的类、接口和枚举等。,Java,基本数据类型可以分为,4,个类型,即整型数、实型数(浮点数)、布尔型数和字符型数,。,2.1.1 Java,数据类型,根据,数据占据的内存空间的大小、数据的表示范围和数据的表示精度,可以将整型数和实型数分为,byte,(字节整型)、,short,(短整型)、,int,(基本整型)、,long,(长整型)、,float,(单精度实型)、,double,(双精度实型),。,布尔,型数用,boolean,表示,字符型用,char,表示。,2.1.1 Java,数据类型,1,、,整型数,没有小
3、数部分的数值型数就是整型数。,(,1,)字节整型数,byte,用一个字节(,8,个二进制数)表示整型数,所以一个字节型数表示数的范围,是:,-128127,。,(,2,)短整型,short,用两个字节(,16,个二进制数)表示整型数,一个短整数表示数的范围,是:,-3276832767,。,2.1.1 Java,数据类型,1,、,整型数,(,3,)基本整型,int,用,4,个字节(,32,个二进制数)表示整型数,一个基本整型数表示数的范围,是:,-2,31,2,31,-1,。,(,4,)长整型,long,用,8,个字节(,64,个二进制数)表示长整型数,一个长整型数表示数的范围,是:,-2,6
4、3,2,63,-1,。,2.1.1 Java,数据类型,给定一个整型数,则它的默认类型是基本整型,如,123,、,-456,都是基本整型数。,如果想使一个整数表示的是长整型数,则可以在整型数后加,L,或,l,,如,123L,、,-456l,是长整型数而不是基本整型数。,没有单独表示字节型数和短整数的方法。在定义变量时,如果给变量赋的值不超过相应类型的范围,则该数就是相应的类型。如:,byte b=123;/,字节型变量,b,的初值是,123,short s=12345;/,短整型变量,s,的初值是,12345,2.1.1 Java,数据类型,用八进制表示时,使用数字,07,,并且以,0,(数字
5、,0,)开头,。,如,:,0123,、,0447,都是,八进制数,而,0789,则是非法数据,。,用十六进制表示时,使用数字,09,、字母,af,和字母,AF,表示,并且以,0 x,或,0X,(数字,0,,大写或小写,X,)开头。,如,:,0 x123,、,0 x45fa,、,0 x97AE,等,都十六进制数。,用二进制表示时,只使用数,0,和,1,,并且以以,0b,或,0B,(数字,0,)开头,。,如:,0b1101,、,0B010011,整型数还可以用八进制、十六进制和二进制的形式表示。,2.1.1 Java,数据类型,2,、,浮点数,带有小数点的数值数就是浮点数,。,如:,123,.,、
6、,123.0,、,123.45,都是,浮点数。,浮点数根据其所表示数的精度可以将浮点数分为单精度数和双精度数,。给定,一个浮点数,则默认为该数是双精度度数,如,123.0,是一个双精度数,。如果,想明确地说明一个数是双精度数,可以在数据的后面加,D,或,d,。,如,:,123.0d,、,-,456.78D,都是,双精度数。,2.1.1 Java,数据类型,如果在一个浮点数后面加,F,或,f,,明确地表示该数是一个单精度数,。,如:,123.0f,、,-,456.78F,是,单精度数而不是双精度数。,浮点数可以用指数形式表示,。,如:,123.45e3,、,-1.25E-5F,、,12.456e
7、1D,123.45e3,表示,123.45*103,。使用指数形式表示浮点数时,,e,或,E,的前面必须有数字,其后面必须是一个整型数,。,如:,12.3e,、,12.3e2.5,、,e-3,等,不是合法的指数形式的浮点数。,2.1.1 Java,数据类型,3.,布尔型数,boolean,布尔型数是逻辑值,用于表示“真”和“假”,。布尔型数的值用,true,和,false,表示。,true,表示“真”,,false,表示“假”。,2.1.1 Java,数据类型,4.,字符型数,char,用,单引号引起的单个字符就是字符型数,。,如,:,a,、,X,、,d,、,2,、,8,、中、国,等,都是字符
8、型数。,在,Java,中,任何一个字符型数都是,Unicode,字符集中的字符。,2.1.1 Java,数据类型,在,编写,程序时,有些特殊字符无法在程序中输入,这时可以用转义字符来表示。,转义字符是字符,和个别字符组合而形成的字符,组合之后的字符表示的是其它字符。转义字符及含义如表,2-1,所示。,转义字符,含义,转义字符,含义,a,响玲,Bell,单引号,b,退格键,Backspace,字符,f,换页,form feed,”,双引号,n,换行,line feed,u0000,空字符,r,回车,carriage return,ddd,三个八进制数表示的转义字符,t,制表键,Tab,udddd
9、,四个十六进制数表示的转义字符,表,2-1,转义字符及含义,2.1.1 Java,数据类型,5.,字符串型数,字符串是用双引号引起的若干字符,序列。,如,:“,Math”,、”,This is a,Java program.”,”,China”,、”,123”,、”,Beijing,”,等都是字符串,。,字符串中可以包括转义字符。,字符串不是基本类型的数据,但是通常情况下都当作是基本数据类型的数据使用。具体表示字符串时是用,String,类(相关内容参见,7.2,)的对象来表示。,【,例,2.1】,转义字符及字符串的使用,。,Example2_01.java,2.1.1 Java,数据类型,6
10、.,数据分隔符,如果数据比较大或数据的位数比较多,则该数的可读性变差,这时可以用“,_”,对数据进行分隔以增加数据的可读性,。,如:,long,creditCardNumber=1234_5678_9012_3456L;,long socialSecurityNumber=999_99_9999L;,float pi=3.14_15F;,long hexBytes=0 xFF_EC_DE_5E;,long hexWords=0 xCAFE_BABE;,2.1.1 Java,数据类型,6.,数据分隔符,long maxLong=0 x7fff_ffff_ffff_ffffL;,byte nybb
11、les=0b0010_0101;,long bytes=0b11010010_01101001_10010100_10010010;,int x3=5_2;/,多个连续的,分隔符,2.1.1 Java,数据类型,6.,数据分隔符,分隔符“,_”,只能用于数字之间,只要有需要就可以使用。但下列情况不可以使用分隔符:,数据的开始和结束处不许使用,分隔符,浮点数,的小数点旁不允许使用分隔符,在数据的前缀或后缀(如,F,或,L,)之前或之后不许使用分隔符,字符串中使用“,_”,当作普通,字符,2.1.1 Java,数据类型,6.,数据分隔符,如:,float pi1=3_.1415F;,float p
12、i2=3._1415F;,long socialSecurityNumber1=999_99_9999_L;,int x2=52_;,int x4=0_x52;,int x5=0 x_52;,int x7=0 x52,_;,等,都是对“,_”,的不正确使用。,2.1.1 Java,数据类型,一般地,字节数多的数有较高的精度,字节数少的数的精度较低,。,所以,,基本数据类型中数值型数据按精度从低到高的次序为,:,byteshortcharintlongfloatdouble,当不同类型的数据进行混合运算时,低精度数先转换成高精度数再与高精度数进行运算,最后得到的数据的类型是高精度类型。,7.,基
13、本数据类型数据的优先次序,2.1.2,标识符,与关键字,在一个,Java,程序中,可能有若干个变量、类、对象和接口等元素。,为了区别不同元素,需要给每一个元素一个惟一的名字,以便与其它元素相区分并标识本身元素,。标识符,和关键字都是元素的名字。,在程序中用于标识变量、类、对象和接口等元素的名字称为标识符,。,如:,int,i;,class Student/,i,是一个标识符,它表示一个整型变量;,Student,也是一个标识符,它表示一个类的类名。,1.,标识符,2.1.2,标识符与关键字,关键字也是标识符,但是关键字是由,Java,语言定义的、程序员不可以,再,重新,定义使用的标识符。如上面
14、的,int,、,class,都是关键字,不能把它们再,重新,定义,。,一般地,标识符指的是用户自定义的名字,关键字是,Java,语言定义,的,名字,。,2.,关键字,3,.,变量,变量在使用前必须先定义。变量定义的形式,:数据类型,变量列表,;,如,:,int a,b;int,i,j;,变量在参与运算前必须有确定的值,可以通过赋值运算(“,=”,)把确定的数据赋给变量,。,如,上面定义的变量,:,a=123,;,变量在定义时可以给变量赋初值,称为变量初始化,。变量,初始化的语法形式,:,数据类型 变量,1=,初始,1,变量,2=,初值,2,变量,n=,初值,n;,2.1.2,标识符,与关键字,
15、3,.,变量,如:,int a=10,b=-35,;,变量,的类型决定了它所保留的值的类型,。,如:,double d=123,;,赋值时不能将一个高精度的数据赋给一个低精度的变量,。,如:,a=123.45;,把,一个低精度的数据赋给一个高精度的变量是可以的。,2.1.2,标识符,与关键字,4,.,数据类型转换,不同类型的数据是不能运算的,。为了,能够实现不同类型数据的运算,在运算前需要先将数据转换成同一类型后再进行运算,。,数据类型,转换的基本原则是将低精度的数据转换成高精度的数据(可以避免数据的丢失)。,数据类型转换又可以分为自动类型转换和强制类型转换,。,2.1.2,标识符,与关键字,
16、(,1,)自动类型转换,Java,编译器能根据参与运算的数据的数据类型自动地将一些数据转换为其它类型。如,:,double d=123;”,再,如下面的运算:,123+a+2*150.0,(,2,)强制类型转换,上面的语句,:,int,a=123.45;,编译不能通过。如果将该语句改成:,a=(int)123.45;,其中的运算“,(int)123.45”,是一个强制类型转换表达式。,强制类型转换的语法形式,:,(,数据类型,)(,表达式,),或,(,数据类型,),表达式,2.1.2,标识符,与关键字,2.1.3,运算符,运算符用于执行数据的运算。,Java,中的运算符如表,2-2,所示,。,
17、表,2-2,运算符,运算符,含义,举例,+,、,-,、,*,、,/,、,%,二元算术运算符,2*3.14*radius,+,、,-,、,+,、,-,一元算术运算符,i+,、,-j,、,=,、,、,y,、,a+b=c+d,&,、,|,、!,逻辑运算符,xy&a+b=c+d,&,、,|,、,、,、,、,位运算符,x&y,、,a2,=,赋值运算符,x=a+b,:?,条件运算符,xy?x:y,+=-=*=/=%=&=|=,扩展的赋值运算符,x+=a+b,instanceof,判断某一对象是否是某个类的实例,aStu instanceof Student,当混合运算时,根据运算符的优先级进行运算。如“,
18、a+b*c”,,乘法“*”的优先级比加法“,+”,的优先级高,所以先计算“,b*c”,,然后再与“,a”,做加法运算。,结合性指的是相同优先级的运算符进行运算时,是从左侧开始计算还是从右侧开始计算。如果从左侧开始计算称左结合,否则称为右结合。,运算符有两个性质,分别是优先级和结合性,。,2.1.3,运算符,2.1.3,运算符,算术运算符执行算术运算,共有,9,个运算,其中,5,个二元运算符,,4,个一元运算符,。,(,1,)二元算术运算符,二元算术运算符分别是,+,(加)、,-,(减)、*(乘)、,/,(除)和,%,(取余),其中的,+,、,-,、*、,/,的操作数可以是任何数值型数据。,做除
19、法运算时,整型数和整型数相除,结果是整型数,如,1/3=0,、,5/2=2,。,取余运算时,两个操作数必须是整型数,其结果是两个数相除后的余数,如,1%3=1,、,5%2=1,、,2%3=2,。,1.,算术运算符,2.1.3,运算符,1.,算术运算符,求余数可按,a%b=a-a/b*b,计算,,如,:,System.out.println(11%2);/,结果为,1,System.out.println(11%-2);/,结果为,1,System.out.println(-11%2);/,结果为,-1,System.out.println(-11%-2);/,结果为,-,1,从结果看,结果的符
20、号取决于第,1,个操作数,所以当两个整数取余运算时,可以先计算两数绝对值的余数,再根据第,1,个操作数的符号确定结果的符号。,2.1.3,运算符,在程序中写算术表达式时,不能将数学中的算术式直接写在程序中,而应按,Java,的语法写表达式。如,:,在,Java,中应写成:,(-b+Math.sqrt(b*b-4*a*c)/(2*a),1.,算术运算符,2.1.3,运算符,(,2,)一元算术运算,符,一元算术运算符分别是,+,(取正)、,-,(取负)、,+,(变量值增加,1,)和,-,(变量值减,1,)。其中,+,和,-,的操作数可以是任何数值型数据。语法形式:,+(,表达式,),或,-(,表达
21、式,),表示将“表达式”的值取正或取负。取正(,+,)运算较少用,。,+,和,-,运算符可以使变量增加,1,或减少,1,,它们的操作数一定是变量,不能是表达式。多数情况下变量都是整型变量。,1.,算术运算符,2.1.3,运算符,根据,运算符和,操作数的位置,可以分为前缀运算和后缀运算。运算符在操作数前称前缀运算,在后则称为后缀运算。语法形式(以,+,为例):,+,变量,或,变量,+,前缀和后缀的运算结果都可以使变量增加或减少,1,,但运算过程不同。,1.,算术运算符,2.1.3,运算符,如果,是前缀运算,先使变量增加,1,,然后再用这个变量参与其它运算;如果是后缀运算,则先使用这个变量,使用变
22、量后再使变量增加或减少,1,。如下面的两组运算,:,如果单独,使变量增,1,或减,1,,,如:,i,+;,则不用考虑前缀还是后缀,。,int i=10,j;,int i=10,j;,j=+i;,j=i+;,2.1.3,运算符,关系运算符用于比较两个量大小关系的运算,通常用于表示运算条件。,关系运算符共有,6,个,分别是:,(大于)、,=,(大于或等于)、,(小于)、,、,=,、,和,c+d,等价于,(a+b)(c+d),x+y=z,等价于,(x+y)=z,b*b-4*a*c=0,等价于,(b*b-4*a*c)=0,2.,关系运算符,2.1.3,运算符,一个关系运算只能表示一个条件。如果一个问题
23、有多个条件,这时可以用逻辑运算将多个条件连接在一起。如算术不等式:,xy,或,ay|ab&cd,等价于,(ab)&(cd),!b=c|da,等价于,(!b)=c)|(dc&x+yc)&(x+y)b,),3.,逻辑运算符,2.1.3,运算符,计算机内部表示数时是用二进制表示的。有时候想获得一个数中的某一位或某几位,就可以通过位运算来实现。,位运算符有,&,(位与)、,|,(位或)、,(位反)、,(位异或)、,(位右移,算术右移)和,(无符号右移),其中的“,”,是一元运算符,其余的是二元运算符。,4.,位运算符,2.1.3,运算符,(,1,)位与运算,两个操作数的对应二进制位进行与运算。如果对应
24、位都是,1,,则位与结果为,1,,否则为,0,。例如“,25&-12”,运算,可以用下面的式子完成计算(以一个字节为例):,(,2,)位或运算,两,个操作数的对应二进位进行或运算。如果对应位都是,0,,则位或结果为,0,,否则只要有一位为,1,则结果为,1,。例如“,25|-12”,运算,可以用下面的式子完成计算(以一个字节为例):,2.1.3,运算符,(,3,)位反运算,一个操作数的各个二进位按位取反,原来是,1,的变成,0,,原来是,0,的变成,1,。例如“,-12”,运算,可以用下面的式子完成计算(以一个字节为例):,(,4,),位,异或运算,两个操作数的对应二进位进行异或运算,异或运算
25、是取不同。如果对应位不同,则位异或结果为,1,,否则结果为,0,。例如“,25-12”,运算,可以用下面的式子完成计算(以一个字节为例):,2.1.3,运算符,(,5,)位左移运算,将一个操作数的各个二进位顺序往左移动若干位。移动后,空出的低位用,0,填充,移出的高位舍弃不要。位左移运算的表达式形式:,操作数,移动的位数,例如“,-123”,运算将,-12,的各位顺序往左移动,3,位,可以用下面的式子完成计算,:,结果,为,-96,,相当于,-12*2,3,。,将一个操作数的各个二进位顺序往右移动若干位。移动后,空出的高位用原来的高位值填充,移出的低位舍弃不要。位左移运算的表达式形式:,操作数
26、,移动,的位数,例如“,-12,3,”,运算将,-12,的各位顺序往右移动,3,位,可以用下面的式子完成计算:,结果,为,-2,,相当于,-12/2,3,。,位右移运算可以使结果的符号与原操作数的符号相同,又称为算术右移,。,3,1,1,1,1,0,1,0,0,(,-12,补码),1,1,1,1,1,1,1,0,(,-2,),2.1.3,运算符,(,7,)无符号位右移运算,将一个操作数的各个二进位顺序往右移动若干位。移动后,空出的高位全部用,0,填充,移出的低位舍弃不要。,位,右,移,运算的表达式形式:,操作数,移动,的位数,例如“,-12,3,”,运算将,-12,的各位顺序往右移动,3,位,
27、可以用下面的式子完成计算,:,结果为,30,。,对于负数,无符号右移的结果与原数差别较大。,无符号右移又称为逻辑右移,。,3,1,1,1,1,0,1,0,0,(,-12,补码),0,0,0,1,1,1,1,0,(,30,),2.1.3,运算符,条件运算符是“,?:”,,可以根据条件进行计算。使用时的语法形式:,关系或逻辑表达式(条件),?,表达式,1:,表达式,2,例如,找出整型数,a,和,b,中的大值,可以用关系运算符计算:,max=ab?a:b;,或:,max=ba?a:b;,条件运算符的优先级高于赋值运算符,但低于其它运算符。结合性是右结合,。,5.,条件运算符,2.1.3,运算符,赋值
28、运算符执行赋值运算。可以将赋值运算符分为基本的赋值运算符和扩展的赋值运算符。,(,1,)基本的赋值运算符,基本的赋值运算符即“,=”,。,由赋值运算符连接操作数所形成的式子称赋值表达式。它的语法形式:,变量,=,表达式,赋值运算符的左侧必须是变量,右侧是合法的表达式(常数、单一变量都是表达式的特例)。,6.,赋值运算符,2.1.3,运算符,(,2,)扩展的赋值运算符,扩展的赋值运算符是由基本的赋值运算符与算术和位运算符组合而成的运算符。扩展的赋值运算符共,11,个,包括:,+=,、,-=,、*,=,、,/=,、,%=,、,&=,、,|=,、,=,、,=,和,=,。,扩展的赋值运算符的使用的语法
29、形式:,变量 扩展的赋值运算符 表达式,如,:,x*=a+b,它的等价形式:,x=x*(a+b),6.,赋值运算符,2.1.3,运算符,6.,赋值运算符,将一个扩展的赋值表达式转换成基本的赋值表达式,可以通过下面的步骤完成,:,将右侧表达式加括号,:,x,*=(a+b),再将左侧的“,x*”,移到赋值号右侧,:,=,x*(a+b),最后再在赋值号左侧加上变量,x,:,x=x,*(a+b,),赋值,运算符的优先级在所有的运算符中最低,也就是,所有其它运算都执行完后才能执行赋值运算。其结合性是右结合,。,2.1.3,运算符,instanceof,是类型比较运算符,用于判断某一个对象是否是某一个类或
30、其子类的实例。如果是,则表达式的值为“,true”,,否则为“,false”,。它的语法形式:,对象,instanceof,类名,类型比较运算符的优先级较高,结合性是左结合。,7.,类型比较运算符,2.2,输入输出,2.3,流程,控制,2.4,数组,2.1,数据类型,和运算,符号,2.5,小结,C,目录,ONTENTS,程序运行时,可能需要给程序输入数据,这时需要用到输入语句;程序处理完数据,要将结果输出出来,就要用到输出语句。,Java,采用流式方式对数据进行输入输出。,Java,定义了很多流类,可以通过流类的对象及其中的方法实现数据的输入输出。,2.2,输入输出,2.2.1,输入,从键盘(
31、标准输入设备)输入数据,可以用,Scanner,类的对象及其中的方法(,C/C+,语言称为函数)实现输入。,Scanner,类的对象的定义形式:,Scanner reader=new Scanner(System.in);,Scanner,类中有较多的方法,常用的与基本数据类型有关的方法见,表,2-4,。,2.2.1,输入,【,例,2.2,】,基本数据类型数据的输入与输出。,Example2_02.java,【,例,2.3】,有若干个学生某一课程的成绩,计算这些学生的总成绩和平均成绩。,由于,学生人数未知(如多个班级多个学生),所以无法准确输入成绩数。这时可以利用方法,hasNextXXX()
32、,判断是否还有成绩,如果有则继续累加,否则计算平均成绩,。,Example2_03.java,2.2.2,输,出,基本数据类型可以用,PrintStream,类中的方法完成输出。类中有三种常用的方法:,void print(,基本数据类型数据,);,void println(,基本数据类型数据,);,void printf(,输出格式控制字符串,输出项表列,);,2.2.2,输出,1.print(),方法,print(),方法有并且只能有一个基本数据类型的数据,包括字符串类型,它输出数据后不换行。,如,a=10,,可以用,System.out.print(“a=”+a);,输出“,a=10”,
33、。,2.println(),方法,println(),方法可以有参数也可以,没,参数,。,如果没参数,只输出一个换行。,如果有参数,有并且只能有一个基本数据类型的参数,输出该参数后换行。它的参数用法与,print(),方法相同。,2.2.2,输出,3.printf(),方法,printf(),方法是有格式的数据输出方法,它一次可以按给定的格式输出较多的数据。它的使用形式:,printf(Stringformat,Object.args),“format”,是用于控制后面输出项的字符串,“,args”,是个数可变的输出数据。,“,format”,的格式如下:,普通字符,%,标志字符,输出宽度,.
34、,小数位数,格式控制字符,普通字符,其中的“,%”,和“格式控制字符”必须有,其余的可有可无。“普通字符”按原样输出。“格式控制字符”如表,2-5,所示。,【,例,2.4】printf(),方法的使用。,Example2_04.java,2.2,输入输出,2.3,流程,控制,2.4,数组,2.1,数据类型,和运算,符号,2.5,小结,C,目录,ONTENTS,2.3.1,顺序控制,语句,【,例,2.5】,给定三角形的三边长(一定能组成三角形),计算三角形的周长和面积,。,Example2_05.java,顺序控制语句是按程序员所写程序中的语句顺序由前往后顺序执行。,2.3.2,选择控制语句,利
35、用选择控制语句,可以使程序有条件地执行某些语句,或不执行某些语句,而不必按照语句顺序执行程序。通过选择语句的使用,可以提高程序的通用性。,Java,中选择语句包括,if,语句和,switch,语句,。,可以通过,if,语句给出条件,只有满足条件的语句才能被执行。,if,语句可以分为简单的,if,语句、,if-else,语句和,if-else if-else,语句。,if,语句中还可以有,if,语句,称为,if,语句的嵌套。,1.if,选择语句,2.3.2,选择控制语句,(,1,)简单的,if,语句,简单的,if,语句可以带有一个条件和子句。根据子句是一条语句还是多条语句,,if,语句的语法形式
36、如下:,形式,1,:,if(,条件表达式,),一条语句(,if,子句),形式,2,:,if(,条件表达式,),多条语句(,if,子句),2.3.2,选择控制语句,简单,if,语句的执行过程如图所示,。,【,例,2.6】,给定两个正整数,找出这两个正整数中的大数。,Example2_06.java,【,例,2.7】,重写例,2.5,,当给定的三边长能构成三角形时才计算三角形的面积。,Example2_07.java,2.3.2,选择控制语句,(,2,),if-else,语句,if-else,语句可以实现两个分支,。,它,的语法形式:,if(,条件表达式,),语句,1,else,语句,2,执行过程
37、如图所示。,【,例,2.8】,用,if-else,语句重写例,2.7,。,Example2_08.java,2.3.2,选择控制语句,(,3,),if,语句的嵌套,如果,if,或,else,的子句还包含,if,语句,称为,if,语句的嵌套。,用嵌套的,if,语句可以实现更复杂的判断,或者将复杂的判断分成几个简单的判断。,if,语句的嵌套没有固定形式,根据问题的需要进行判断。可以写出如下几种形式:,形式,1,:,if(,条件,1),if(,条件,2),语句,形式,2,:,if(,条件,1),if(,条件,11),语句,1,else,if(,条件,2),语句,2,2.3.2,选择控制语句,【,例,
38、2.9】,根据学生的百分成绩给出成绩等级。,90,分以为优秀,,80,分以为良好,,70,分以为中等,,60,分以上为及格,低于,60,分为不及格。,Example2_09.java,形式,3,:,if(,条件,1),if(,条件,11),语句,1,else,语句,2,形式,4,:,if(,条件,1),if(,条件,11),语句,1,else,if(,条件,2),语句,2,2.3.2,选择控制语句,(,4,),if-else if-else,语句,if-else if-else,可以实现更多情况的判断。它的语句形式:,if(,条件表达式,1),语句,1,else if(,条件表达式,2),语句
39、,2,else if(,条件表达式,n),语句,n,else,语句,n+1,2.3.2,选择控制语句,它的,执行过程如图所示,。,【,例,2.10】,用,if-else if-else,语句改写例,2.9,。,Example2_10.java,(,4,),if-else if-else,语句,2.3.2,选择控制语句,switch,语句也用于选择判断。,当判断条件较多时,用,if,或嵌套的,if,语句会降低程序的可读性,这时可用,switch,实现多重选择判断。,switch,语句的语法形式,:,2.switch,选择语句,2.3.2,选择控制语句,switch,(,表达式,),case,常量
40、,1,:,语句,组,1,;,case,常量,2:,语句组,2;,case,常量,n:,语句组,n;,default:,语句组,n+1;,2.switch,选择语句,2.3.2,选择控制语句,switch,语句的执行过程如图所示。,【,例,2.12】,用,switch,语句重写例,2.9,。,Example2_12.java,2.3.2,选择控制语句,如果想使某一情况下只执行某一语句组,可以在每一语句组后加上“,break”,语句,。,switch(,表达式,),case,常量,1:,语句组,1;break;,case,常量,2:,语句组,2;break;,case,常量,n:,语句组,n;br
41、eak;,default:,语句组,n+1;,2.3.2,选择控制语句,加上,“,break”,语句后,switch,语句的执行过程如图所示。,【,例,2.13】,重写例,2.12,,使程序能有正确的运行结果。,Example2_13.java,2.3.3,循环控制语句,循环结构根据一定的条件可以对问题或问题的部分进行反复处理,直到条件不满足结束循环。循环结构的程序可以更有效地利用计算机。,Java,语言中有三种循环语句,分别是,while,循环、,do-while,循环和,for,循环。,while,循环是先判断条件是否为真,如果为真,则执行循环。,while,循环的语句形式:,1.whil
42、e,循环,形式,1,:,while(,循环条件,),一条语句(循环体),形式,2,:,while(,循环条件,),多条语句(循环体),2.3.3,循环控制语句,while,语句的执行过程如图所示。,【,例,2.14】,计算,1+2+3+100,值。,Example2_14.java,2.3.3,循环控制语句,do-while,循环是先执行循环体,再根据条件确定是否能再执行循环体。,do-while,循环的语句形式:,2.do-while,循环,形式,1,:,do,一条语句(循环体),while(,循环条件,);,形式,2,:,do,多条语句(循环体),while(,循环条件,);,2.3.3,
43、循环控制语句,执行过程如图所示。,【,例,2.16】,用,do-while,语句重写例,2.14,。,Example2_16.java,2.3.3,循环控制语句,for,循环是三种循环中使用最灵活、使用最多的循环。在,for,循环中,可以对变量(循环控制变量)初始化、控制循环(循环条件)和使变量变化(循环控制变量增量)。,for,循环的一般语法形式:,for(,变量初始化表达式,;,循环条件表达式,;,变量增量表达式,),循环体,3.for,循环,2.3.3,循环控制语句,执行过程如图所示。,【,例,2.18】,用,for,语句重写例,2.14,。,Example2_18.java,【,例,2
44、.19】,判断一个自然数是否是素数。所谓素数是指,如果一个数如果只能被,1,和自身整除,则该数是素数,又称质数,。,Example2_19.java,一个数的因子除该数本身外不可能大于该数的一半,循环条件可以写成:,i=x/2,更快的方法:,i=(int)Math.sqrt(x),2.3.3,循环控制语句,for,语句中有三个表达式,根据需要,三个表达式中可以没有任何一个、没有任何两个,甚至三个表达式都可以没有,。,形式,1,:没有第,1,个表达式,变量,i,的初始化在,for,之前用赋值语句实现。,sum=0;,i=1;,for(;i=100),break;,2.3.3,循环控制语句,形式,
45、3,:没有第,3,个表达式,变量,i,的改变放在循环体中,成为循环体中的一条语句。,sum=0;,for(i=1;i=100;),sum+=i;,i=i+1;,2.3.3,循环控制语句,形式,4,:没有第,1,个表达式和第,3,个表达式,综合使用形式,1,和形式,3,。,sum=0;,i=1;,for(;i=100),break;,i+;,2.3.3,循环控制语句,形式,6,:循环体是空循环体,累加过程放在第,3,个表达式中。,for(sum=0,i=1;i=100;sum+=i,i,+),;,2.3.3,循环控制语句,如果循环体中还有循环语句,则形成循环的嵌套。以下是几种循环的嵌套形式。,4
46、.,循环的嵌套,形式,1,:,for(),while(),形式,2,:,while(),do,while();,2.3.3,循环,控制语句,如果循环体中还有循环语句,则形成循环的嵌套。以下是几种循环的嵌套形式。,4.,循环的嵌套,【,例,2.20】,给定两个自然数,找出这两个然数之间的所有素数。,Example2_20.java,形式,3,:,do,for,(),while();,形式,4,:,while(),while(),2.3.4,选择,控制语句与循环控制语句的嵌套,上面分别讲述了选择控制语句和循环控制语句。,在实际使用时,两种控制语句经常混用,选择语句嵌套循环语句,或者循环语句嵌套选择
47、语句。多数情况下,都是循环语句嵌套选择语句,如例,2.20,和例,2.21,中就是循环语句嵌套了选择语句。,2.3.5 break,语句与,continue,语句,在前面介绍,switch,语句时讲过,break,语句。,break,语句用于,switch,中可以提前结束,switch,语句。,break,语句更多是用在循环中。,break,用在循环中可以提前结束它所在的循环,不管后面还有多少次循环都不再被执行了。,break,语句可以分成基本的,break,语句和带标号的,break,语句。,break,语句和,continue,语句都是控制转移语句。,1.break,语句,2.3.5 br
48、eak,语句与,continue,语句,(,1,)基本的,break,语句,基本的,break,语句的语法形式:,break;,一定要将这个语句放到循环体中,否则会出现编译错误。,【,例,2.22】,计算,1!+2!+3!+,,直到某一个数的阶乘大于,1000_000,为止(大于,1000_0000,的数不累加)。,Example2_22.java,2.3.5 break,语句与,continue,语句,(,2,)带标号的,break,语句,基本的,break,语句使它所在的循环提前结束,而带标号的,break,语句可以使标号所指的循环提前结束。,带标号的,break,语句的语法形式:,标号,
49、:,break,标号,;,一般地,带标号的,break,语句多用在多重循环中,用于在内层循环中提前结束外层的循环。,【,例,2.23】,找出从,100,开始的若干个素数,直到某一个非素数的第一个因子大于,15,为止。,Example2_23.java,2.3.5 break,语句与,continue,语句,continue,语句用在循环中,可以使它所在循环的当前一次循环提前结束,即使它下面还有语句也不再执行,接着执行下一次循环。,continue,语句也分为基本的,continue,语句和带标号的,continue,语句。,2.continue,语句,2.3.5 break,语句与,conti
50、nue,语句,(,1,)基本的,continue,语句,基本的,continue,语句的语法形式:,continue;,这条语句必须在一个循环体中。,【,例,2.24】,从键盘输入若干个正整数,将其中不能被,3,整除的数累加在一起,并输出其和,当输入负数时结束。,Example2_24.java,2.3.5 break,语句与,continue,语句,(,2,)带标号的,continue,语句,带标号的,continue,语句使它标号所指的循环当前一次循环提前结束,后面的若干次循环还能继续执行。它的语法形式:,标号,:,continue,标号,;,带标号的,continue,语句一般用在多重循