2013-07-29 220 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,使用靜態方法,將其從該處移出。