是否使用了switch语句中的所有情况......?

时间:2012-06-27 01:57:46

标签: java

您好我正在使用Bukkit为游戏Minecraft编写插件。基本上当玩家右键点击鸡蛋时,鸡蛋具有特定的耐久性。耐久性根本不会改变,因为每次有人做这个事件和个人时都会调用事件。我目前的代码没有完成,但基本上就是这样:

if (e.getItem().getTypeId() == 383) {
        if (!worldguardPlugin.canBuild(e.getPlayer(), loc)) {
            e.setCancelled(true);
            e.getPlayer().sendMessage(
                    ChatColor.YELLOW
                            + "You cant use spawner eggs in this region!");
            return;
        }
        switch (e.getItem().getDurability()) {
        case 2:
            expOrb(e);
            break;
        case 9:
            painting(e);
            break;
        case 20:
            primedTnt(e);
            break;
        case 40:
            minecart(e);
            break;
        case 41:
            boat(e);
            break;
        case 50:
            creeper(e);
            break;
        case 51:
            skeleton(e);
            break;
        case 52:
            spider(e);
            break;
        case 53:
            giant(e);
            break;
        case 54:
            zombie(e);
            break;
        case 55:
            slime(e);
            break;
        case 56:
            ghast(e);
            break;
        case 57:
            pigman(e);
            break;
        case 58:
            enderman(e);
            break;
        case 59:
            cavespider(e);
            break;
        case 60:
            silverfish(e);
            break;
        case 61:
            blaze(e);
            break;
        case 62:
            cube(e);
            break;
        case 63:
            dragon(e);
            break;
        case 90:
            pig(e);
            break;
        case 91:
            sheep(e);
            break;
        case 92:
            cow(e);
            break;
        case 93:
            chicken(e);
            break;
        case 94:
            squid(e);
            break;
        case 95:
            wolf(e);
            break;
        case 96:
            moosh(e);
            break;
        case 97:
            snowGolem(e);
            break;
        case 98:
            ocelot(e);
            break;
        case 99:
            ironGolem(e);
            break;
        case 120:
            villager(e);
            break;
        case 200:
            crystal(e);
            break;
        default:
            break;
        }
    }
}

由于我正在使用break,我所做的所有方法都不会被正确调用?这将导致许多无意义的代码被执行并浪费性能,而这个设计的全部意义在于更好的工作流程。

3 个答案:

答案 0 :(得分:2)

你的假设是正确的。只会执行符合特定switch案例的代码。毕竟,switch语句可以替代巨大的if-else if-else块。

答案 1 :(得分:2)

在您的情况下,由于中断,仅执行与切换语句特别匹配的项。如果没有休息,则会调用第一个匹配,然后调用ALL。例如,代码:

System.out.println("starting");

int i = 2;
switch (i) {
    case 1:
        System.out.println(1);
    case 2:
        System.out.println(2);
    case 3:
        System.out.println(3);
}

System.out.println("finished");

产生以下输出:

starting
2
3
finished

答案 2 :(得分:0)

低效率是您需要检查所有情况的地方,除非您到达最后的情况,例如在这种情况下为200。您需要重新组织决策制定流程,以便在更频繁的案例中至少运行得更快。尽管switch语句是由编译器优化的,但是如果有太多的东西需要比较,那么它就无法做很多事情。

从switch语句的角度来看,你是对的:如果它到达break语句就会短路。