




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java支持两种选择语句:if语句和switch语句。这些语句允许你只有在程序运行时才能知道其状态的情况下,控制程序的执行过程。如果你没有C/C+的编程背景,你将会为这两个语句的强大功能和灵活性而感到吃惊。 1.1if语句 if语句是Java中的条件分支语句。它能将程序的执行路径分为两条。if语句的完整格式 if(condition)statement1; elsestatement2; 其中,if和else的对象都是单个语句(statement),也可以是程序块。条件condition可以是任何返回布尔值的表达式。else子句是可选的。 if语句的执行过程如下:如果条件为真,就执行if的对象(statement1);否则,执行else的对象(statement2)。任何时候两条语句都不可能同时执行。考虑下面的例子: inta,b;/.if(a0) ProcessData();bytesAvailable-=n;elsewaitForMoreData(); 这里,如果变量bytesAvailable大于0,则if块内的所有语句都会执行。 一些程序员觉得在使用if语句时在其后跟一个大括号是很方便的,甚至在只有一条语句的时侯也使用大括号。这使得在日后添加别的语句变得容易,并且你也不必担心忘记括号。事实上,当需要定义块时而未对其进行定义是一个导致错误的普遍原因。例如,考虑下面的程序段: intbytesAvailable; /. if(bytesAvailable0) ProcessData();bytesAvailable-=n; else waitForMoreData(); bytesAvailable=n; 由于编排的原因,看起来似乎bytesAvailable=n语句应该在else子句中执行。然而,当你调用时,空白对Java无关紧要,编译器无法知道你的意图。这段程序会通过编译,但运用时会出错。上述例子应修改 intbytesAvailable; /. if(bytesAvailable0) ProcessData(); bytesAvailable-=n; else waitForMoreData(); bytesAvailable=n; 嵌套if语句 嵌套(nested)if语句是指该if语句为另一个if或者else语句的对象。在编程时经常要用到嵌套if语句。当你使用嵌套if语句时,需记住的要点就是:一个else语句总是对应着和它在同一个块中的最近的if语句,而且该if语句没有与其他else语句相关联。下面是一个例子: if(i=10)if(j100)c=d;/thisifiselsea=c;/associatedwiththiselse elsea=d;/thiselsereferstoif(i=10) 如注释所示,最后一个else语句没有与if(j20)相对应,因为它们不在同一个块(尽管if(j100),因为它是同一个块中最近的if语句。 if-else-if阶梯 基于嵌套if语句的通用编程结构被称为if-else-if阶梯。它的语法 if(condition)statement;elseif(condition)statement;elseif(condition) statement; . . . else statement; 条件表达式从上到下被求值。一旦找到为真的条件,就执行与它关联的语句,该阶梯的其他部分就被忽略了。如果所有的条件都不为真,则执行最后的else语句。最后的else语句经常被作为默认的条件,即如果所有其他条件测试失败,就执行最后的else语句。如果没有最后的else语句,而且所有其他的条件都失败,那程序就不做任何动作。 下面的程序通过使用if-else-if阶梯来确定某个月是什么季节。 /Demonstrateif-else-ifstatements. classIfElse publicstaticvoidmain(Stringargs) intmonth=4;/April Stringseason; if(month=12|month=1|month=2) | season=Winter; elseif(month=3|month=4|month=5) season=Spring; elseif(month=6|month=7|month=8) season=Summer; elseif(month=9|month=10|month=11) season=Autumn; else season=BogusMonth; System.out.println(Aprilisinthe+season+.); 该程序产生如下输出: AprilisintheSpring. 在往下继续讲之前,你可能想要先试验这个程序。你将看到,不管你给month什么值,该阶梯中有而且只有一个语句执行。 1.2switch语句 switch语句是Java的多路分支语句。它提供了一种基于一个表达式的值来使程序执行不同部分的简单方法。因此,它提供了一个比一系列if-else-if语句更好的选择。switch语句的通用形式 switch(expression) casevalue1: /statementsequence break; casevalue2: /statementsequence break; . . . casevalueN: /statementsequence break; default: /defaultstatementsequence 表达式expression必须为byte,short,int或char类型。每个case语句后的值value必须是与表达式类型兼容的特定的一个常量(它必须为一个常量,而不是变量)。重复的case值是不允许的。 switch语句的执行过程表达式的值与每个case语句中的常量作比较。如果发现了一个与之相匹配的,则执行该case语句后的代码。如果没有一个case常量与表达式的值相匹配,则执行default语句。当然,default语句是可选的。如果没有相匹配的case语句,也没有default语句,则什么也不执行。 在case语句序列中的break语句将引起程序流从整个switch语句退出。当遇到一个break语句时,程序将从整个switch语句后的第一行代码开始继续执行。这有一种“跳出”switch语句的效果。 下面是一个使用switch语句的简单例子: /Asimpleexampleoftheswitch. classSampleSwitch publicstaticvoidmain(Stringargs) for(inti=0;i6;i+) switch(i) case0: System.out.println(iiszero.); break; case1: System.out.println(iisone.); break; case2: System.out.println(iistwo.); break; case3: System.out.println(iisthree.); break; default: System.out.println(iisgreaterthan3.); 该程序的输出 iiszero. iisone. iistwo. iisthree. iisgreaterthan3. iisgreaterthan3. 从中可以看出,每一次循环,与i值相配的case常量后的相关语句就被执行。其他语句则被忽略。当i大于3时,没有可以匹配的case语句,因此执行default语句。break语句是可选的。如果你省略了break语句,程序将继续执行下一个case语句。有时需要在多个case语句之间没有break语句。例如下面的程序: /Inaswitch,breakstatementsareoptional. classMissingBreak publicstaticvoidmain(Stringargs) for(inti=0;i12;i+) switch(i) case0: case1: case2: case3: case4: System.out.println(iislessthan5); break; case5: case6: case7: case8: case9: System.out.println(iislessthan10); break; default: System.out.println(iis10ormore); 该程序产生的输出 iislessthan5 iislessthan5 iislessthan5 iislessthan5 | iislessthan5 iislessthan10 iislessthan10 iislessthan10 iislessthan10 iislessthan10 iis10ormore iis10ormore 正如该程序所演示的那样,如果没有break语句,程序将继续执行下面的每一个case语 句,直到遇到break语句(或switch语句的末尾)。当然该例子是为了示例而人为构造的,省略break语句在真实的程序中有许多实际的应 用。为了说明它更现实的用法,让我们考虑下例对以前显示季节例子的重写。这个重写的 版本使用switch语句来使程序的执行更高效。 /Animprovedversionoftheseasonprogram. classSwitch publicstaticvoidmain(Stringargs) intmonth=4; Stringseason; switch(month) case12: case1: case2: season=Winter; break; case3: case4: case5: season=Spring; break; case6: case7: case8: season=Summer; break; case9: case10: case11: season=Autumn; break; default: season=BogusMonth;System.out.println(Aprilisinthe+season+.); 嵌套switch语句 可以将一个switch语句作为一个外部switch语句的语句序列的一部分,这称为嵌套switch语句。因为一个switch语句定义了自己的块,外部switch语句和内部switch语句的case常量不会产生冲突。例如,下面的程序段是完全正确的: switch(count) case1: switch(target)/nestedswitch case0: System.out.println(targetiszero); break; case1:/noconflictswithouterswitch System.out.println(targetisone); break; break; case2:/. 本例中,内部switch语句中的case1:语句与外部switch语句中的case1:语句不冲突。变量count仅与外层的case语句相比较。如果变量count为1,则变量target与内层的case语句相比较。 概括起来说,switch语句有3个重要的特性需注意: switch语句不同于if语句的是switch语句仅能测试相等的情况,而if语句可计算任何类型的布尔表达式。也就是switch语句只能寻找case常量间某个值与表达式的值相匹配。 在同一个switch语句中没有两个相同的case常量。当然,外部switch语句中的case常量可以和内部switc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论