经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
Java开发笔记(十七)各得其所的多路分支
来源:cnblogs  作者:pinlantu  时间:2018/11/1 9:42:29  对本文有异议

前面提到条件语句的标准格式为“if (条件) { /* 条件成立时的操作代码 */ } else { /* 条件不成立时的操作代码 */ }”,乍看之下仿佛只有两个分支,一个是条件成立时的分支,另一个是条件不成立时的分支。很明显仅仅两个分支是不能满足复杂的业务需求的,自然Java代码也不会这么傻瓜到固步自封,为此else分支还允许嫁接别的if条件,形如“if (条件一) { } else if (条件二) { } else if (条件三) { } else { }”这样,不管来几个条件分支,都能通过“else if”加以判断和处理。像之前的猜谜游戏,输入数字1时打印凉风有信的谜底,输入数字2时打印秋月无边的谜底,现在规定输入其它数字要打印“按键有误”的提示,此时一共存在三个条件分支,往原来的if/else语句添加一个“else if”即可实现三个分支。
下面便是改写成三个分支之后的代码例子:

  1. System.out.println("凉风有信,秋月无边。打二字");
  2. System.out.println("获取“凉风有信”的谜底请按1,获取“秋月无边”的谜底请按2");
  3. Scanner scan = new Scanner(System.in); // 从控制台接收输入文本
  4. /* nextLine方法表示接收一行文字,以回车键结尾 */
  5. int seq = scan.nextInt();
  6. if (seq == 1) { // 条件式子1为真时,进入第一个if分支处理
  7. System.out.println("凉风有信的谜底是“讽”");
  8. } else if (seq == 2) { // 否则的话,继续判断条件式子2为真时,进入第二个if分支处理
  9. System.out.println("秋月无边的谜底是“二”");
  10. } else { // 否则(前面的判断条件都不满足),进入else分支处理
  11. System.out.println("您的按键有误");
  12. }

 

可要是分支数量多了起来,岂不是得写一样多的“if else”?这种做法虽然可行,但毕竟大费周折,条理也不够清晰。故而早期的设计师构造了“swicth-case”语句,也被称作是多路分支结构,在该控制流程之中,对每个分支都指定了一个数值把关,只有设定的变量符合数值要求,才能进到相应的分支处理。这样做的好处是,方便编译器在底层进行优化,既可利用二分查找法加快寻找速度,又可采取地址映射直接找到指定分支。兼容并蓄的Java自然继承了有利于调优的“swicth-case”,多路分支语句除了swicth和case,还额外增加了break和default两个关键字。break的作用是跳出整个多路分支,不再执行本分支及其余分支的代码;default的作用相当于else,所有不满足任何已知条件的数值,都进入到default这个默认分支来处理。
仍以猜谜游戏为例,使用“swicth-case”改写后的多路分支代码如下所示:

  1. // switch允许判断某个变量的多个取值,并分别进行单独处理
  2. switch (seq) {
  3. case 1: // seq值为1时进入该分支
  4. System.out.println("凉风有信的谜底是“讽”");
  5. break; // 跳出多路分支。即跳到switch分支的右花括号之后
  6. case 2: // seq值为2时进入该分支
  7. System.out.println("秋月无边的谜底是“二”");
  8. break; // 跳出多路分支。即跳到switch分支的右花括号之后
  9. default: // seq值为其它时进入该分支
  10. System.out.println("您的按键有误");
  11. break; // 跳出多路分支。即跳到switch分支的右花括号之后
  12. }
  13. System.out.println("猜谜结束");

 

多路分支固然好用,但要特别注意以下几点:
1、每个case分支末尾务必要加上break语句,否则即使该分支走完了也不会跳出多路分支,而是继续执行该分支的后面一个分支代码,显然这并非程序员的本意。
2、多路分支只能判断整型、字符串、枚举这三种类型的变量,无法判断布尔、浮点、双精度等其它类型的变量。
3、case语句后面的数值,只能用来进行相等判断,不能开展大于、小于等其它关系运算。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号