![第3章运算符、表达式与语句_第1页](http://file4.renrendoc.com/view/ffea9697a7d95ac8f5c0be5ebdfe35cd/ffea9697a7d95ac8f5c0be5ebdfe35cd1.gif)
![第3章运算符、表达式与语句_第2页](http://file4.renrendoc.com/view/ffea9697a7d95ac8f5c0be5ebdfe35cd/ffea9697a7d95ac8f5c0be5ebdfe35cd2.gif)
![第3章运算符、表达式与语句_第3页](http://file4.renrendoc.com/view/ffea9697a7d95ac8f5c0be5ebdfe35cd/ffea9697a7d95ac8f5c0be5ebdfe35cd3.gif)
![第3章运算符、表达式与语句_第4页](http://file4.renrendoc.com/view/ffea9697a7d95ac8f5c0be5ebdfe35cd/ffea9697a7d95ac8f5c0be5ebdfe35cd4.gif)
![第3章运算符、表达式与语句_第5页](http://file4.renrendoc.com/view/ffea9697a7d95ac8f5c0be5ebdfe35cd/ffea9697a7d95ac8f5c0be5ebdfe35cd5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章运算符、表达式与语句
本章导读1.算术运算符和算术表达式2.关系运算符与关系表达式3.逻辑运算符与逻辑表达式4.赋值运算符与赋值表达式5.移位运算符6.位运算符7.条件运算符8.instanceof运算符9.一般表达式10.语句概述11.分支语句12.循环语句13.跳转语句按照运算符所操作数据的个数,可以将其分为一元运算符、二元运算符和三元运算符。按照操作数据的类型,可以将运算符分为算术运算符、赋值运算符、自增/自减运算符、条件运算符、位运算符、关系运算符、逻辑运算符等等。3.1算术运算符和算术表达式3.1算术运算符和算术表达式(1)加减运算符加减运算的结合性是从左到右。加减运算的操作元是整型或浮点型数据,加减运算符的优先级是4级。(2)乘、除和求余运算符乘、除和求余运算的运算符号为*、/、%,都是双目运算符。*、/、%运算符的结合性是从左到右,例如:2*3/8,先计算2*3,然后再将得到的结果除以8。乘、除和求余运算的操作元是整型或浮点型数据。*、/、%运算符的优先级是3级。
(3)自增、自减运算符自增、自减运算的运算符号为:++、--,都是单目运算符,运算符的优先级是2级。运算符可以放在操作元之前,也可以放在操作元之后,但操作元必须是一个整型或浮点型变量(不能是常量或表达式)。运算符的作用是使变量的值增1或减1,如:
++x,--x表示在使用x之前,先使x的值加(减)1。
x++,x--表示在使用x之后,使x的值加(减)1。粗略地看,++x和x++的作用相当于x=x+1。但++x和x++的不同之处在于,++x是先执行x=x+1再使用x的值,而x++是先使用x的值再执行x=x+1。如果x的原值是5,则:对于y=++x;y的值为6。对于y=x++;y的值为5,然后x的值变为6。(4)算术表达式用算术符号和操作元连接起来的符合Java语法规则的式子,称为算术表达式。如
x+2*y-30+3*(y+5)-12+n+(--n)。(5)算术混合运算的精度精度从“低”到“高”排列的顺序是:
byteshortintlongfloatdoubleJava将按运算符两边的操作元的最高精度保留结果的精度,例如:5/2的结果是2,要想得到2.5,必须写成5.0/2或5.0f/2。算数运算符运算符用法含义结合性二元运算符+op1+op2加法左-op1-op2减法左*op1*op2乘法左/op1/op2除法左%op1%op2模运算(求余)左一元运算符++op1正数右--op1负数右++++op1,op1++自增右,左----op1,op1++自减右,左对于二元运算符,运算结果的数据类型一般为两个操作数中表达范围较大的类型。例如,一个整数和浮点数运算的结果为浮点数。对于一元运算符,运算结果的类型与操作数的类型相同。自增、自减运算符有前缀和后缀两种形式,当是前缀形式(即++、--符号出现在变量的左侧)时,对变量实施的运算是“先运算后使用”;当是后缀形式(即++、--符号出现在变量的右侧)时,对变量实施的运算是“先使用后运算”。算数运算符的特点char型数据和整型数据运算结果的精度是int。例如:bytek=18;那么‘H’+k;的结果是int型,因此下列写法是不正确的,charch=’H’+k;应当写成:charch=(char)(’H’+k);返回在Java中,"%"(求模运算符)的操作数可为浮点数,如52.3%10=2.3;Java对"+"运算进行了扩展,可作字符串连接运算符,如"ab"+"efd"得"abefd";做"+"运算时,如果一个操作数是字符串,其它操作数自动转换成字符串.如:
Strings;s="s:"+4*5;
//结果是s="s:20";byte,short,char等类型进行混合运算时,会先自动转换为int类型再运算。算数运算符的注意事项publicclassTest{publicstaticvoidmain(String[]args){inti=29;intj=3;floata=23.5f;doubleb=4.0; System.out.println("i+a="+(i+a));System.out.println("i*j="+(i*j));System.out.println("i/j="+(i/j));//对于整数,运算结果为整数
System.out.println("i%j="+(i%j));//求余数
System.out.println("a*b="+(a*b));System.out.println("a/b="+(a/b));//对于浮点数,运算结果为浮点数
System.out.println("a%b="+(a%b));//浮点数求余,结果为浮点数
System.out.println("i++="+(i++));//先使用,后自增
System.out.println(“++i=”+(++i));//先自增,后使用}}程序举例分析:在打印输出语句中,+除了可以进行加法运算外,还可以进行字符串的连接,吧字符串和数值类型在一起进行运算,最后转换为字符串输出。条件运算符的格式如下:(boolean_expr)?true_statement:false_statement;其含义为:若boolean_expr为真,则执行true_satatement;如果为假,则执行语句false_statement,要求这两条语句返回同样(相容)的数据类型。例如:result==sum?100:2*num;条件运算符除~为右结合外,其余为左结合。操作数的类型一般为整型或字符型。&,|,^三个运算符可以用于boolean。">>"右移是用符号位来填充右移后留下的空位,">>>"是用零来填充空位.若两个数据的长度不同,如a&b,a为byte型,b为int型,系统首先会将a的左侧24位填满,若a为正,则填满0,若a为负,填满1即进行“符号扩充”。注意事项3.2关系运算符与关系表达式
关系运算符用来比较两个值的关系,关系运算符的运算结果是boolean型数据,当运算符对应的关系成立时,运算结果是true,否则是false。(1)大小关系运算符大小关系运算的符号分别是:>、>=、<、<=,都是双目运算符,操作元是数值型的常量、变量或表达式。例如,10<9的结果是false,5>1的结果是true。在书写时要特别注意的是“<=”是一个完整的符号,在“<”和“=”之间不要含有空格。大小关系运算符的级别是6级,例如,10>20-17的结果为true,因为算术运算符的级别高于关系运算符,10>20-17相当于10>(20-17)。
(2)等与不等关系等与不等关系运算的符号分别是:“==”、“!=”,都是双目运算符。运算符的级别是7级。“==”和“!=”都是由2个字符组成的一个完整的符号,书写时不要含有空格。注意不要将后面讲述的赋值运算符“=”与等号运算符“==”混淆。(3)关系表达式结果为数值型的变量或表达式可以通过关系运算符形成关系表达式。例如,24>18,(x+y+z)>30+x等。返回关系运算符关系运算符用来比较两个值之间的大小,结果为布尔值,true或者false,而不是1和0运算符示例含义==Op1==Op2比较两个数是否相等!=Op1!=Op2比较两个数据是否不等<Op1<Op2比较一个是否小于另一个>Op1>Op2比较一个是否大于另一个<=Op1<=Op2比较一个是否小于等于另一个>=Op1>=Op2比较一个是否大于等于另一个3.3逻辑运算符与逻辑表达式逻辑运算只能处理布尔类型的数据,所得结果也是布尔值逻辑运算符支持短路运算
运算符示例含义结合性&&Op1&&Op2逻辑与运算左||Op1||Op2逻辑或运算左!!Op逻辑非运算右3.3逻辑运算符与逻辑表达式
逻辑运算用来实现boolean型数据的逻辑“与”、“或”和“非”运算,运算结果是boolean型数据。(1)逻辑“与”和逻辑“或”逻辑“与”和逻辑“或”运算的符号是:&&、||,是双目运算符,操作元是boolean型的变量或求值结果是boolean型数据的表达式。“&&”的运算法则是:当2个操作元的值都是true时,运算结果是true,否则是false。“||”的运算法则是:当2个操作元的值都是flase时,运算结果是false,否则是true。“&&”和“||”的级别分别是11和12级,结合性是左到右。例如,1>8&&9>2的结果为false,1>8||6>2的结果为true。由于关系运算符的级别高于&&和||的级别,所以,1>8&&9>2相当于(1>8)&&(9>2)。
(2)逻辑“非”逻辑“非”运算的符号是:!,是单目运算符,操作元在左面。当操作元的值是TURE时,运算结果是FALSE;反之为TURE。“!”的运算级别是2级,结合性从右到左。例如,!!X相当于!(!X)。(3)逻辑表达式结果为boolean型的变量或表达式可以通过逻辑运算符形成逻辑表达式。例如,24>18&&4<0,x!=0||y!=0。返回逻辑运算符的短路运算短路计算,就是从左向右依次计算每个条件是否成立,如果在前面的计算中,已经可以得出整个复合条件表达式的计算结果,则后面不再计算。例如:inti=5,对于表达式(i>8)&&(i<4)的计算为短路计算位运算符&,|,^可以用于逻辑运算,但是它们不支持短路计算。3.4赋值运算符与赋值表达式
赋值运算符:=。赋值运算符是双目运算符,左面的操作元必须是变量,不能是常量或表达式。设x是一个整型变量,y是一个boolean型变量,x=120和y=false都是正确的赋值表达式,赋值运算符的优先级较低,是14级,结合方向右到左。赋值表达式的值就是“=”左面变量的值。注意不要将赋值运算符“=”与等号运算符“==”混淆。
返回赋值运算符赋值运算符包括两种:基本赋值运算符扩展赋值运算符基本赋值运算<变量名>=<表达式>其中,“=”是赋值运算符例如:intI,j;i=10;j=i+20扩展赋值运算符运算符示例含义+=count+=2count=count+2-=count-=2
count=count-2*=count*=2
count=count*2/=count/=2
count=count/2%=count%=2count=count%2赋值相容如果参加运算的变量类型和表达式类型相同,则可以赋值,称之为类型相同;如果两者类型不同,并且变量类型比表达式类型长时,系统会自动将表达式转化为较长的类型,如int转换为long,这时也可以赋值,称之为赋值相容如果类型变量比表达式类型短,则赋值不相容,编译时会产生错误。这时,需要使用类型强制转换才能进行赋值。例如:intsmallval=99L;floatz1=12.414;intsmallval=(int)99L;floatz1=(float)12.414;位运算(含移位运算和位运算)不是对整个数进行运算,而是对该数表示的二进制位上的0和1进行运算Java用补码表示二进制数1表示为二进制为
00000000000000000000000000000001(4个字节)-1表示为二进制为11111111111111111111111111111111(4个字节)3.5移位运算符
位运算符运算符示例含义
&Op1
&
Op2使Op1和Op2按位相与
|Op1
|
Op2使Op1和Op2按位相或
~~Op对Op按位取反
^Op1^Op2使Op1和Op2按位异或
<<Op1<<
Op2使Op1左移Op2位,右补0
>>Op1>>
Op2使Op1右移Op2位(带符号,左边补充符号位)
>>>Op1>>>Op2使Op1无符号右移Op2位(左边始终补添0)3.5移位运算符
位运算符用来对二进制位进行操作,分为左移位操作和右移位操作。(1)左移位运算符左移位运算的符号为:<<,是双目运算符。左移位运算符左面的操作元称作被移位数,右面的操作数称作移位量,操作元必须是整型类型的数据。假设a是一个被移位的整型数据,n是位移量。
a<<n运算的结果是通过将a的所有位都左移n位,每左移一个位,左边的高阶位上的0或1被移出丢弃,并用0填充右边的低位。
对于byte或short型数据,a<<n的运算结果是int型精度。当进行
a<<2
运算时,计算系统首先将a升级为int型数据,对于正数将高位用0填充;负数用1填充,然后在进行移位运算。例如,对于
bytea=-8;11111000
在进行a<<1运算时,首先将11111000生级为int型,将高位用1填充:
11111111111111111111111111111000
然后在进行移位运算得到-16:
11111111111111111111111111110000
因此,如果把a<<1的结果赋值给一个byte型变量就必须进行强制转换运算:
byteb=(byte)(a<<1);
在进行a<<n运算时,如果a是byte、short或int型数据,系统总是先计算出n%32的结果m,然后进行a<<m运算。例如,a<<33的计算结果与a<<1相同。对于long型数据,系统总是先计算出n%64的结果m,然后进行a<<m运算。(2)右移位运算符右移位运算的符号为:>>,是双目运算符。假设a是一个被移位的整型数据,n是位移量。
a>>n运算的结果是通过将a的所有位都右移n位,每右移一个位,右边的低阶位被移出丢弃,并用0或1填充左边的高位,a是正数用0填充,负数时用1填充。因此,a每右移一次,如果该数的每一计算有效位都没有从低位移出时,就相当于将a除以2并舍弃了余数。整数不断右移位的最后结果一定是0,而负数不断右移位的最后结果是-1。对于byte或short型数据,a>>n的运算结果是int型精度。
在进行a>>n运算时,如果a是byte、short或int型数据,系统总是先计算出n%32的结果m,然后进行a>>m运算,例如,a>>33的计算结果与a>>1相同。对于long型数据,系统总是先计算出n%64的结果m,然后进行a>>m运算。在下面的例子1中,用户输入移位运算的两个操作元,程序给出右移和左移后的结果。返回举例:运算符<<<<十进制数二进制数操作数1500000000000000000000000000000101操作数2200000000000000000000000000000010运算结果2000000000000000000000000000010100在没有溢出的情况下,左移一位相当于乘以2举例:运算符>>>>十进制数二进制数操作数1500000000000000000000000000000101操作数2200000000000000000000000000000010运算结果100000000000000000000000000000001右移一位相当于除以23.6位运算符
(1)“按位与”运算符“&”是双目运算符,对两个整型数据a、b按位进行运算,运算结果是一个整型数据c。运算法则是:如果a、b两个数据对应位都是1,则c的该位是1,否则是0。如果b的精度高于a,那么结果c的精度和b相同。(2)“按位或”运算符“|”是双目运算符。对两个整型数据a、b按位进行运算,运算结果是一个整型数据c。运算法则是:如果a、b两个数据对应位都是0,则c的该位是0,否则是1。如果b的精度高于a,那么结果c的精度和b相同。(3)“按位非”运算符“~”是单目运算符。对一个整型数据a按位进行运算,运算结果是一个整型数据c。运算法则是:如果a对应位是0,则c的该位是1,否则是0。(4)“按位异或”运算符“^”是双目运算符。对两个整型数据a、b按位进行运算,运算结果是一个整型数据c。运算法则是:如果a、b两个数据对应位相同,则c的该位是0,否则是1。如果b的精度高于a,那么结果c的精度和b相同。位运算符在操作逻辑型数据时,与逻辑运算符&&、||、!不同的是:位运算要计算完a和b之后再给出运算的结果。在下面的例子2中,利用“异或”运算的性质,对几个字符进行加密并输出密文,然后再解密。运行结果见图3-2。
图3-2返回举例:运算符&&十进制数二进制数操作数1500000000000000000000000000000101操作数2900000000000000000000000000001001运算结果100000000000000000000000000000001用于将某些特定的位清0举例:运算符||十进制数二进制数操作数1500000000000000000000000000000101操作数2900000000000000000000000000001001运算结果1300000000000000000000000000001101用于将某些特定的位置1举例:运算符^^十进制数二进制数操作数1500000000000000000000000000000101操作数2900000000000000000000000000001001运算结果1200000000000000000000000000001100举例:运算符~~十进制数二进制数操作数1500000000000000000000000000000101运算结果-6111111111111111111111111111100103.7条件运算符
条件运算符是一个3目运算符,它的符号是:“?:”,需要连接3个操作元,用法如下:
op1?op2:op3
要求第一个操作元op1的值必须是boolean型数据。运算法则是:当op1的值是true时,op1?op2:op3运算的结果是op2的值;当op1的值是false时,op1?op2:op3运算的结果是op3的值。例如,12>8?100:200的结果是100;12<8?100:200的结果是200。返回3.8instanceof运算符
该运算符是双目运算符,左面的操作元是一个对象,右面是一个类。当左面的对象是右面的类创建的对象时,该运算的结果是true,否则是false。该运算符将在第4章以后使用。返回3.9一般表达式
Java的一般表达式就是用运算符及操作元连接起来的符合Java规则的式子,简称表达式。一个Java表达式必须能求值,即按着运算符的计算法则,可以计算出表达式的值。例如,假如intx=1,y=-2,n=10;那么,表达式
x+y+(--n)*(x>y&&x>0?(x+1):y)
的值是int型数据,结果为17。返回3.10语句概述
Java里的语句可分为以下5类:(1)方法调用语句在第4章将介绍类、对象等概念,对象可以调用类中的方法产生行为,如:例子1中的
reader.nextInt();
(2)表达式语句一个表达式的最后加上一个分号就构成了一个语句,称作表达式语句。分号是语句不可缺少的部分。例如,赋值语句:
x=23;
(3)复合语句可以用“{”和“}”把一些语句括起来构成复合语句,一个复合语句也称作一个代码块。例如,
{z=23+x;System.out.println("hello");}
(4)控制语句控制语句包括:条件分支语句、循环语句和跳转语句。(5)package语句和import语句
package语句和import语句与类、对象有关,将在第4章讲解。返回块(复合语句)是用一对花括号括起来的任意数量的简单Java语句。块容许在任何Java程序设计的结构中拥有多条简单语句,否则结构本身可能只含有一条简单语句。注:(1)块容许嵌套;(2)不能在嵌套的块类声明相同名字的变量。复合语句Java中提供了两条基本的分支选择语句:if语句和switch语句,可以形成三种形式的选择结构:(1)双分支选择结构:if/else(2)单分支选择结构:if(3)多分支选择结构:switch3.11分支语句3.11分支语句1.条件分支语句(1)if-else语句.if-else语句是Java中的一条语句,由一个“if”、“else”和两个复合语句按一定格式构成,if-else语句的格式如下:
if(表达式){若干语句}else{若干语句
}
一条if-else语句的作用是根据不同的条件产生不同的操作,执行法则如下:
if后面()内的表达式的值必须是boolean型的。如果表达式的值为true,则执行紧跟着的复合语句;如果表达式的值为false,则执行else后面的复合语句。1、if语句的基本形式if(布尔表达式) {语句块1}else {语句块2}2、省略了else子句的if语句if(布尔表达式) {语句块1}if语句if或else控制的对象可以是单个语句(statement),也可以是程序块(block)。条件condition可以是任何返回布尔值的表达式。else子句是可选的。
(2)多条件if-elseif-else语句程序有时需要根据多条件来选择某一操作,这时就可以使用if-elseif-else语句。if-elseif-else语句是Java中的一条语句,由一个“if”、若干个“elseif”、一个“else”与若干个复合语句按一定规则构成。语句的格式如下:
if(布尔表达式1) {语句块1} elseif(布尔表达式2){语句块2} elseif(布尔表达式3){语句块3}
…. else{语句块n}publicclassc3_1{ publicstaticvoidmain(Stringargs[]) { intgrade=76; if(grade>=90)System.out.println(“成绩:优”); elseif(grade>=80)System.out.println(“成绩:良”); elseif(grade>=70)System.out.println(“成绩:中”); elseif(grade>=60)System.out.println(“成绩:及格”); elseSystem.out.println(“成绩:不及格”); }}示例程序c3_1.java(1)Java编译器是将else与最近的if组合在一起,除非用花括号{}指定不同的匹配方式。(2)当语句块包含多条简单语句时,必须用花括号{}将这些语句括起来,否则会出错。使用if嵌套时的注意事项
有时为了编程的需要,复合语句中可以没有任何语句。一条if-elseif-else语句的作用是根据不同的条件产生不同的操作,执行法则如下:
if以及elseif后面()内的表达式的值必须是boolean型的。该语句执行时,首先计算if后括号中的表达式的值,如果该表达式的值为true,则执行紧跟着的复合语句,然后就结束整个语句的执行;如果if后括号中的表达式的值为false,就依次再计算后面的elseif的表达式的值,直到出现某个表达式的值为true为止,然后执行该elseif后面的复合语句,结束整个语句的执行。如果所有的表达式的值都是false,就执行else后面复合语句,结束整个语句的执行。在下面的例子3中,用户在键盘输入3个数,程序判断这3个数能构成什么形状的三角形。2.switch开关语句switch语句是多分支的开关语句,它的一般格式定义如下:switch(表达式){case常量值1:若干个语句
break;
case常量值2:若干个语句
break;
………case常量值n:若干个语句
break;
default:若干语句
}publicclassc3_2{ publicstaticvoidmain(Stringargs[]) { intgrade=76; switch(grade/10) {case10: case9:System.out.println(“成绩:优”);break; case8:System.out.println(“成绩:良”);break; case7:System.out.println(“成绩:中”);break; case6:System.out.println(“成绩:及格”);break; default:System.out.println(“成绩:不及格”); } }}示例程序c3_3.java(1)switch语句后面的表达式类型可以是byte,char,short,int,不容许float,double,long;(2)case后面的值应各不相同,且类型应与表达式类型一致;(3)default可省略不要;(4)若去掉break语句,在执行完成第一个匹配case语句后面的语句块之后,会继续执行其余case语句后面的语句块,而不管表达式的值是否与case语句的值匹配。(5)如果没有一个case常量与表达式的值相匹配,则执行default语句。(6)case语句只是起到一个标号作用,用来查找匹配的入口并从此处开始执行其后的语句序列,注意:
switch语句中表达式的值必须是整型或字符型;常量值1到常量值n必须也是整型或字符型。switch语句首先计算表达式的值,如果表达式的值和某个case后面的常量值相同,就执行该case里的若干个语句,直到碰到break语句为止。若没有任何常量值与表达式的值相同,则执行default后面的若干个语句。其中default是可有可无的,如果它不存在,并且所有的常量值都和表达式的值不相同,那么switch语句就不会进行任何处理。需要注意的是,在同一个switch语句中,case后的常量值必须互不相同。下面的例子4使用了switch语句,用户在键盘输入一个代表月份的整数,程序输出是该月是在年度的第几季度。返回循环分类:(1)不确定循环(2)确定循环Java提供了三种循环语句:(1)while(2)do-while(3)for3.12循环语句3.12循环语句1.while循环
while语句的一般格式:
while(表达式){若干语句
}while语句由关键字while、括号中的一个求值为boolean型数据的表达式和一个复合语句组成,其中的复合语句称作循环体,循环体只有一条语句时,大括号“{}”可以省略,但最好不要省略,以便增加程序的可读性。表达式称作循环条件。while语句的执行规则是:(1)计算表达式的值,如果该值是true时,就进行(2),否则进行(3)。(2)执行循环体,再进行(1)(3)结束while语句的执行
while语句执行规则如流程图3.5所示。while语句执行规则如流程图3.5所示。表达式
循环体truefalse图3.5while循环语句//计算10!publicclassc3_3{ publicstaticvoidmain(Stringargs[]) { intnum=10,result; result=1; while (num!=0) {result*=num; --num; } System.out.print(“\tresult=”+result); }}示例程序c3_3.java
2.do-while循环一般格式:
do{若干语句
}while(表达式);do-while循环和while循环的区别是:do-while的循环体至少被执行一次,如图3.6所示。下面的例子5分别用while和do-while循环计算常数e的近似值:e=1+1/1+1/2!+1/3!+……。
循环体表达式truefalse图3.6do-while循环语句
3.for循环
for语句的一般格式:
for(表达式1;表达式2;表达式3){若干语句
}for语句由关键字for、括号中用分号分割的3个表达式,以及一个复合语句组成,其中的“表达式2”必须是一个求值为boolean型数据的表达式,而复合语句称作循环体。
for语句的执行规则是:(1)计算“表达式1”,完成必要的初始化工作(2)判断“表达式2”的值,若“表达式2”的值为true,则进行(3),否则进行(4)。(3)执行循环体,然后计算“表达式3”,以便改变循环条件,进行(2)。图3.9使用for语句(4)结束for语句的执行.
一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6=1+2+3。下面的例子6使用for循环计算出1000内的全部完数
返回(1)在for语句中,括号内的三个表达式均可省略。当省略了任何一个表达式时,必须在循环语句块中的其他位置,否则容易造成死循环。(2)在for语句的“初值表达式”和“循环过程表达式”中可以使用逗号“,”。(3)在循环中小心使用对浮点数是否相等的测试。例如:
for(doublex=0;x!=10;x+=0.1)………….
是死循环
注意:(4)在for语句的第一个初值表达式中声明了一个变量,该变量的作用域从这里开始一直到for循环体结束。且在循环内部定义的变量,在循环外部不能使用。例如:
for(intI=1;I<=10;I++)intI;{ for(intI=1;I<=10;I++)
……………….{}…………..//变量I在此处无定义}//在此处变量I有定义注意:(5)在不同的for循环体语句块中,可以定义相同名称的变量。例如:
for(intI=1;I<=10;I++) {
………… }
………. for(intI=11;I<=20;I++) {
………… }注意:(6)for循环等价于while循环。即:
for(statement1;expression1;expression2)statement2;statement1;while(expression1){statement2; expression2;}注意://计算中奖几率importjavax.swing.*;publicclassc3_4{ publicstaticvoidmain(String[]args) { Stringinput=JOptionPane.showInputDialog("你希望抽取多少个数?"); intk=Integer.parseInt(input); input=JOptionPane.showInputDialog("一共有多少个数?"); intn=Integer.parseInt(input); intresult=1; for(inti=1;i<=k;i++)result=result*(n-i+1)/i; System.out.println("你中奖的几率是1/"+result); System.exit(0); }}示例程序c3_4.java
循环控制主要有两种方法:利用计数器控制循环,利用标记控制循环。大多数循环利用计数器的原理来控制。设计计数器控制的循环程序,注意以下几点:(1)循环控制变量的名字;(2)循环控制变量的初值;(3)每一次执行循环时,循环控制变量的增量(或减量)(4)测试循环控制变量的终值条件。标记控制循环主要适用于无法事先知道循环次数的情况。循环控制要点importjava.io.*;publicclassc3_5{ publicstaticvoidmain(String[]args)throwsIOException { BufferedReaderkeyin=newBufferedReader(newInputStreamReader(System.in)); intLtotal=0,Wtotal=0,Ztotal=0; charname; Stringc1; System.out.print("enterletterLorWorZname,#toend:"); c1=keyin.readLine(); name=c1.charAt(0); while(name!='#') { switch(name) { case'L': case'l':Ltotal++;break;程序示例C3_5.java(标记控制循环) case'W': case'w':Wtotal++;break; case'Z': case'z':Ztotal++;break; } System.out.print("enterletterLorWorZname,#toend:"); c1=keyin.readLine(); name=c1.charAt(0); } System.out.println("Ltotal="+Ltotal); System.out.println("Wtotal="+Wtotal); System.out.println("Ztotal="+Ztotal); }}程序示例C2_15.java(接上)
循环嵌套是在循环体内包含循环程序的情形。Java提供的三种循环可以自身嵌套,也可以相互嵌套。但在嵌套的过程中不能出现交叉。循环嵌套//计算1!+2!+3!+......+10!publicclassc2_16{ publicstaticvoidmain(String[]args) { intresult=0,tmpresult=1; for(inti=1;i<=10;i++) { for(intj=1;j<=i;j++)tmpresult=tmpresult*j; result+=tmpresult; tmpresult=1; } System.out.println("\tresult="+result); }}程序示例c2_16.java在for循环内声明变量在for循环中使用逗号
for的其它用法for(inta=1,b=4;a<b;a++,b--){System.out.println("a="+a);System.out.println("b="+b);}for-eachpublicclassForEachDemo{ publicstaticvoidmain(String[]args){ intsum=0; inta[]=newint[100]; for(inti=0;i<100;i++) a[i]=101+i; //for-each语句的使用
for(inte:a)sum=sum+e; System.out.println("thesumis"+sum); }}可以用for语句遍历一个数组或集合中的所有元素。
该程序中,“:”表示“in”的意思,for(inte:a)就是“foreachinteina”,即“对于数组a中的每个整数e”。通过定义一个整数变量e表示数组中的每个元素。for-each循环看上去比一般的for循环漂亮的多,不需要使用下标。Foreachbreak语句continue语句return语句3.13跳转语句Break语句可以独立使用,而continue语句只能在循环结构的循环体中。一、break语句
break语句通常有不带标号和带标号两种:
break;breakLab;
其中:break是关键字,Lab是用户定义的标号。一、break语句在Java中,break语句有3种作用。第一,在switch语句中,它被用来终止一个语句序列或者语句块。第二,它能被用来退出一个循环。第三,它能作为一种“先进”的goto语句来使用。Break语句的应用使用break退出循环break语句1/2for(inti=0;i<3;i++){System.out.print("Pass"+i+":");for(intj=0;j<100;j++){if(j==10)
break;System.out.print(j+"");}System.out.println();}把break当作goto的一种形式来用
booleant=true;first:{second:{
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东省揭阳市名校2024-2025学年初三五月模拟考试(二)物理试题试卷含解析
- 广东省江门蓬江区五校联考2024年英语八年级第二学期期末联考试题含答案
- 广东省广州市越秀区荔湾区联考2025届普通高中高三质量监测(四)物理试题试卷含解析
- 新员工岗前安全培训考试题附答案(综合题)
- 易燃易爆物品管理制度
- 高考政治 专题40 寻觅社会的真谛热点题型和提分秘籍(含解析)
- 制造业与计算机工程师
- 安全标准化安全培训考试题及参考答案【满分必刷】
- 研发投入与创新科技成果报告
- 射频识别技术及应用
- 2024年中国移动通信集团天津限公司校园招聘(高频重点提升专题训练)共500题附带答案详解
- 医院改善就医感受提升患者体验案例
- 老旧小区改造项目重点与难点分析
- 2024年全国基金从业资格证之私募股权投资基金基础知识考试绝密预测题详细参考解析
- 学校食堂餐饮服务投标方案(技术标 )
- 2024年中考英语新热点时文阅读-中华文化(二)
- NB/T 11433-2023煤矿短壁间隔充填采煤技术规范
- 完整版大学生宪法知识竞赛题库及答案完整版完整版
- 新型工业化的概念与背景
- G-B-Z 185-2024 职业性三氯乙烯药疹样皮炎诊断标准 (正式版)
- 嗜酸性肉芽肿性血管炎新视野
评论
0/150
提交评论