通过枚举循环?

时间:2015-05-30 03:17:53

标签: java loops enums

我正在尝试找到一种更好的方法来编写以下代码:

public static void initTab(Player player) {
    player.getPacketSender().sendString(15002, "Achievements - " + amountCompleted(player, Difficulty.TOTAL) + "/30");
    player.getPacketSender().sendString(15007, "Easy Tasks - " + amountCompleted(player, Difficulty.EASY) + "/10");
    player.getPacketSender().sendString(15008, getColor(player, 0, 0)+Achievements.Tasks.TASK1.getName());
    player.getPacketSender().sendString(15009, getColor(player, 1, 0)+Achievements.Tasks.TASK2.getName());
    player.getPacketSender().sendString(15010, getColor(player, 2, 0)+Achievements.Tasks.TASK3.getName());
    player.getPacketSender().sendString(15011, getColor(player, 3, 0)+Achievements.Tasks.TASK4.getName());
    player.getPacketSender().sendString(15012, getColor(player, 4, 0)+Achievements.Tasks.TASK5.getName());
    player.getPacketSender().sendString(15013, getColor(player, 5, 0)+Achievements.Tasks.TASK6.getName());
    player.getPacketSender().sendString(15014, getColor(player, 6, 0)+Achievements.Tasks.TASK7.getName());
    player.getPacketSender().sendString(15015, getColor(player, 7, 0)+Achievements.Tasks.TASK8.getName());
    player.getPacketSender().sendString(15016, getColor(player, 8, 0)+Achievements.Tasks.TASK9.getName());
    player.getPacketSender().sendString(15017, getColor(player, 9, 0)+Achievements.Tasks.TASK10.getName());
}

我正在考虑使用for循环遍历ID(15008,15009,等等......)但我不知道如何循环遍历ID中的枚举值同样的方式。

我在说这个:  Achievements.Tasks.TASK1.getName()

我有一个名为Tasks的枚举,这里有一些值的示例:

    TASK1(Difficulty.EASY, TaskType.GLOBAL, "Easy Test1", "Test Description.", 1, new int[]{8147, 8148}),
    TASK2(Difficulty.EASY, TaskType.GLOBAL, "Easy Test2", "Test Description.", 1, new int[]{8150, 8151}),
    TASK3(Difficulty.EASY, TaskType.GLOBAL, "Easy Test3", "Test Description.", 1, new int[]{8153, 8154}),
    TASK4(Difficulty.EASY, TaskType.GLOBAL, "Easy Test4", "Test Description.", 1, new int[]{8156, 8157}),
    TASK5(Difficulty.EASY, TaskType.GLOBAL, "Easy Test5", "Test Description.", 1, new int[]{8159, 8160}),

getName()获取值中的第一个字符串:" Easy Test1"

我想知道:循环枚举值的简单方法,因此我可以在几行代码中对所有值使用getName()方法。

摘要

我需要循环这句话:

player.getPacketSender().sendString(15008, getColor(player, 0, 0)+Achievements.Tasks.TASK1.getName());

我需要知道如何做到这一点:

Achievements.Tasks.TASK#.getName()

这个问题并不重复,因为我要求循环使用两个不同的东西。我需要同时遍历枚举和int(15008,15009等)。不仅仅是枚举,而不仅仅是int。我可以为for循环中的枚举嵌套for循环吗?

1 个答案:

答案 0 :(得分:3)

请参阅Oracle Documentationclass EnumLoop { enum Color {RED, BLUE, GREEN}; public static void main(String[] args) { for (Color c : Color.values()) { System.out.println(c.name()); } } } 如果这就是你想要的,你可以这样做:

method

这是Demo