2013-07-29 189 views
1

,所以我有枚举称为地形获取信息

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数组,我想比较它,如果它确实等于这个值,我将该块存储在一个单独的图像数组中。

编辑:

对于那些说我应该放的getValue()方法,我想我的值进行比较,以所有的枚举的东西,如果它不等于(4为例,此时我可以把我的形象(灰尘)。

我在不同的类选中此。

+0

@马克安德烈:没有抱歉只是一秒,生病了修复它 – Exikle

+1

@Exikle看到我的答案,也许这就是你要找的。 –

回答

1

一种可能性是添加静态函数的地形枚举为:

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

我想比较它之前,我知道什么类型的地形使用,请参阅我的编辑操作。 – Exikle

+0

看到我的其他回答^^ –

1

添加一个getValue()方法来枚举:

public int getValue() { 
    return value; 
} 

无论你有Terrain枚举的一个实例,调用getValue()方法做比较,只要你喜欢:

Terrain terrain = Terrain.getTerrain(4); 

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

我想比较它之前我知道什么类型的地形即时通讯使用,请参阅我的编辑操作。 – 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 = somevalue; 
    if(terrain == Terrain.DIRT) { 
    // do something 
    } 
0

在大多数情况下:使用此枚举

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

如果你想从一个int您可以使用内置的valueOf(String)(这将是你的问题最简单的解决)Java的一个Terrain

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

当然,你必须为int转换为字符串(我用的串联与一个空字符串

编辑:表现最好的解决问题的方法是使用一个静态数组,在索引处包含Terrain,使用静态方法,将其从该处移出。