1

您好,我正在使用 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,我所做的所有方法都不会被称为正确吗?这会导致大量无意义的代码被执行并浪费性能,而这个设计的全部目的是为了更好的工作流程。

4

3 回答 3

2

你的假设是正确的。只有满足特定switch情况的代码才会被执行。毕竟,switch语句是一个巨大的if-else if-else块的替代品。

于 2012-06-27T01:59:45.707 回答
2

在您的情况下,由于中断,只有与切换语句特别匹配的项目才会执行。如果没有休息,则将调用第一场比赛,然后是所有比赛。例如,代码:

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
于 2012-06-27T02:10:33.007 回答
0

效率低下是您需要检查所有案例的地方,除非您最终找到那些案例,例如在这种情况下为 200 个。您需要重新组织决策过程,使其至少在更频繁的情况下运行得更快。虽然 switch 语句是经过编译器优化的,但是如果要比较的东西太多的话,也做不了什么。

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

于 2012-06-27T02:06:55.950 回答