2013-07-29 3 views
1

Так я Enum называется TerrainПолучение информации из Enum

public enum Terrain { 
    DIRT(4, "res/imgs/DirtTile.png"), GRASS(5, "res/imgs/GrassTile.png"); 

    private String filePath; 
    private Image image; 
    private boolean imageLoaded; 
    private int value; 

    Terrain(int val, String imagePath) { 
     value = val; 
     filePath = imagePath; 
     imageLoaded = false; 
    } 

    public Image getImage() { 
     if (!imageLoaded) { 
      loadImage(); 
     } 
     return image; 

    } 

    public void loadImage() { 
     try { 
      image = ImageIO.read(new File(filePath)); 
     } catch (IOException e) { 
      System.err.println("Failed to load image!"); 
      e.printStackTrace(); 
     } 
     imageLoaded = true; 
    } 
} 

То, что я хочу, чтобы иметь возможность сравнить Int к значению местности, так что если это не равно, что местность будет обращено на экран.

Я думал что-то вроде

if(int==Terrain.value){} 

Но я не совсем уверен, как идти об этом. Если кто-то может помочь мне в этом, у меня есть массив int, который я хочу сравнить с ним, и если он равен значению, я сохраняю эту плитку в отдельном массиве изображений.

EDIT:

Для всех тех, кто говорят, что я должен поставить метод GetValue(), я хочу, чтобы сравнить свое значение на все вещи Enums и если оно равно (до 4, например, то Я могу установить мое изображение (в грязи).

Я проверяю это в другом классе.

+0

@ Marc-Andre: не жалко ни секунды, плохо исправить это – Exikle

+1

@Exikle См. Мой ответ, возможно, это то, что вы ищете. –

ответ

1

Одна возможность это добавить статическую функцию в Terrain перечислении как:

static Terrain getTerrainFor(int val) 
{ 
    for (Terrain t : Terrain.values()) 
    { 
     if (t.value() == val) 
     return t; 
    } 

    return t; 
} 

называют это (Terrain.getTerrainFor (INT)) сделать логический

+0

не самое эффективное решение, а не самое легкое, но решение. –

1

у вас уже есть метод getImage. Просто добавьте аналогичный метод для getValue

public int getValue() { 
    return value; 
} 

, то вы можете сделать

if (2 == Terrain.DIRT.getValue()) 
    //doSomething() 
+0

Я хочу сравнить его, прежде чем я узнаю, какой тип местности использует, см. Мое редактирование в op. – Exikle

+0

См. Мой другой ответ ^^ –

1

Добавить метод getValue() к перечислению:

public int getValue() { 
    return value; 
} 

Везде, где у вас есть экземпляр Terrain перечисления, вызовите метод getValue() и сделать сравнение, как вам нравится:

Terrain t = Terrain.DIRT; 
if (t.getValue() == 4) { 
    System.our.println("The terrain value is 4!"); 
} 
+0

Я хочу сравнить его, прежде чем я узнаю, какой тип местности использует, см. Мое редактирование в op. – Exikle

1
enum Terrain{ 


    private int value; 
    private static final Map<Integer, Terrain> terrainMap; 

    static{ 
     terrainMap = new HashMap<Integer, Terrain>(); 
     for(Terrain type: values()){ 
      terrainMap.put(type.value, type); 
     } 
    } 

    public static Terrain getTerrain(int value){ 
     return terrainMap.get(value); 
    } 

    } 

код, который использует это перечисление:

Terrain terrain = Terrain.getTerrain(4); 

switch(terrain){ 
    case DIRT: 
    //draw dirt 
} 
0

В большинстве случаев например, лучше всего было бы избавиться от ints и вместо этого использовать тип перечисления.

Terrain terrain = somevalue; 
    if(terrain == Terrain.DIRT) { 
    // do something 
    } 
0

Если вы хотите, чтобы получить Terrain от int вы можете использовать Java встроенный в valueOf(String) (Это было бы самым простым решением вашей проблемы).

int i = 2; 
Terrain t = Terrain.valueOf("" + i); 

Конечно, вы должны преобразовать Int в строку (я использовал конкатенацию с пустой строкой для этого

EDIT:. Лучшее выполнение решения вашей проблемы было бы использовать статический массив, который содержит индекс Terrain по индексу со статическим методом, который получает его оттуда.

Смежные вопросы