关于switch分支判断问题

关于switch分支判断问题我理解不清:

var fruits:Array=["苹果","香蕉","葡萄","金桔","小番茄"];
                        var currentFruit:String=fruits[Math.floor(Math.random()*fruits.length)];
                        trace("摸到的水果是:"+currentFruit);
                        switch(currentFruit){
                                case "葡萄":
                                     trace("哎,葡,葡萄!");
                                case "小番茄":
                                     trace("免费品尝!");
                                     break;
                                case "苹果":
                                case "香蕉":
                                     trace("按价付钱");
                                     break;
                                default:
                                     trace("一定是金桔,不买。");

//为什么当选择水果是葡萄的时候也会出现“免费品尝”呢?“免费品尝”是写在小番茄里面的,为什么只要是抽到是葡萄后面的都会执行就不用比较是不是小番茄了?。。还有下面的苹果香蕉类似的情况,只要抽到苹果就不要比是否是香蕉了,也会显示“按价付钱”。。?


得解:

  1. switch(currentFruit){
  2.     case "葡萄":
  3.         trace("哎,葡,葡萄!");
  4.     case "小番茄":
  5.         trace("免费品尝!");
  6.         break;
  7. }
  8. // 相当于
  9. if(currentFruit=="葡萄" || currentFruit=="小番茄"){
  10.     if(currentFruit=="葡萄") {
  11.          trace("哎,葡,葡萄!");
  12.     }
  13.     trace("免费品尝!");
  14. }
复制代码

开始一个case后,如果该case符合条件,则会查找下个break,而该case与下个break之间的所有case都将与第一个case进行或运算(||),你可以看成被直接忽略了。
所以,如果选择的是葡萄,那么在case "葡萄"与下一个break之间的所有语句都将被执行。

posted @ 2011-07-20 20:39  梦羽纱  阅读(268)  评论(0编辑  收藏  举报