1

こんにちは、Bukkit を使用してマインクラフト ゲームのプラグインをコーディングしています。基本的に、プレイヤーが卵を右クリックすると、その卵には特定の耐久性があります。誰かがこれとその個人を行うたびにイベントが呼び出されるため、耐久性はまったく変わりません。私が現在持っているコードは完了していませんが、これは基本的にそれです:

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;
        }
    }
}

ブレークを使用しているため、作成したすべてのメソッドが正しく呼び出されませんか? これにより、多くの無意味なコードが実行され、パフォーマンスが無駄になります。この設計の目的は、ワークフローを改善することでした。

4

3 に答える 3

2

あなたの場合、ブレークのために、switchedステートメントに特に一致するアイテムのみが実行されます。ただし、休憩がなかった場合は、最初の一致が呼び出され、その後すべてが呼び出されます。たとえば、次のコードは次のとおりです。

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 に答える
2

あなたの仮定は正しいです。switch特定のケースを満たすコードのみが実行されます。結局のところ、switch ステートメントは巨大なif-else if-elseブロックの代わりになります。

于 2012-06-27T01:59:45.707 に答える
0

非効率性は、この場合の 200 のように、最後のケースに到達しない限り、すべてのケースをチェックする必要がある場所です。意思決定プロセスを再編成して、より頻繁に発生するケースに対して少なくとも高速に実行されるようにする必要があります。switch ステートメントはコンパイラによって最適化されますが、比較するものが非常に多い場合はあまりできません。

switch ステートメントの観点からは、あなたは正しいです。break ステートメントに到達すると、短絡します。

于 2012-06-27T02:06:55.950 に答える