2014-09-22 39 views
1

我一一列舉了所有這些。有沒有一種方法佔用更少的空間?什麼是更清潔,更優雅的方式來初始化所有這些?

public class Matt{ 
    PImage matt, 
    imgLS1, imgLS2, imgLS3, imgRS1, imgRS2, imgRS3, 
    imgLSB1, imgLSB2, imgLSB3, imgRSB1, imgRSB2, imgRSB3, 
    imgLW1, imgLW2, imgLW3, imgRW1, imgRW2, imgRW3, 
    imgLWB1, imgLWB2, imgLWB3, imgRWB1, imgRWB2, imgRWB3; 
    public Matt(){  
     imgLS1 = loadImage("./Images/Matt/MattLS1.png"); 
     imgLS2 = loadImage("./Images/Matt/MattLS2.png"); 
     imgLS3 = loadImage("./Images/Matt/MattLS3.png"); 
     imgRS1 = loadImage("./Images/Matt/MattRS1.png"); 
     imgRS2 = loadImage("./Images/Matt/MattRS2.png"); 
     imgRS3 = loadImage("./Images/Matt/MattRS3.png"); 
     imgLSB1 = loadImage("./Images/Matt/MattLSB1.png"); 
     imgLSB2 = loadImage("./Images/Matt/MattLSB2.png"); 
     imgLSB3 = loadImage("./Images/Matt/MattLSB3.png"); 
     imgRSB1 = loadImage("./Images/Matt/MattRSB1.png"); 
     imgRSB2 = loadImage("./Images/Matt/MattRSB2.png"); 
     imgRSB3 = loadImage("./Images/Matt/MattRSB3.png"); 
     imgLW1 = loadImage("./Images/Matt/MattLW1.png"); 
     imgLW2 = loadImage("./Images/Matt/MattLW2.png"); 
     imgLW3 = loadImage("./Images/Matt/MattLW3.png"); 
     imgRW1 = loadImage("./Images/Matt/MattRW1.png"); 
     imgRW2 = loadImage("./Images/Matt/MattRW2.png"); 
     imgRW3 = loadImage("./Images/Matt/MattRW3.png"); 
     imgLWB1 = loadImage("./Images/Matt/MattLWB1.png"); 
     imgLWB2 = loadImage("./Images/Matt/MattLWB2.png"); 
     imgLWB3 = loadImage("./Images/Matt/MattLWB3.png"); 
     imgRWB1 = loadImage("./Images/Matt/MattRWB1.png"); 
     imgRWB2 = loadImage("./Images/Matt/MattRWB2.png"); 
     imgRWB3 = loadImage("./Images/Matt/MattRWB3.png"); 
    } 
} 
+1

@M:

final int N_FILES = 3; // files/position -- could also be a variable enum Position { LS, RS, LSB, RSB, LW, RW, LWB, LRB } Map<Position, String[]> files = new EnumMap<>(Position.class); for (Position pos : Position.values()) { String[] posFiles = new String[N_FILES]; files.put(pos, posFiles); for (int i = 1; i <= N_FILES; ++i) { posFiles[i-1] = "./Images/Matt/Matt" + pos.name() + i + ".png"; } } 

然後你可以使用如下代碼訪問的任何元素akoto不需要粗魯。只需發佈答案。 – 2014-09-22 02:55:07

+0

我想知道是否有沒有使用列表的方法,如果不是,我將如何構建這個列表與一個列表中的所有這些不同的圖像文件的循環 – 2014-09-22 02:55:50

+0

你將如何處理圖像? LS,RS,LSB,RSB,LW,RW,LWB和RWB是什麼意思? – 2014-09-22 02:56:23

回答

3

將圖像放在Map<String,PImage>中,按圖像後綴組織地圖。至於訪問的圖像而言,這種做法可能會稍微不太方便/不是直接使用變量有效,但是它會爲你節省大量的空間:

static final String[] suffixes = new String[] {"LS1", "LS2", "LS3", ..., "RWB3"}; 
Map<String,PImage> images = new HashMap<String,PImage>(); 
public Matt() { 
    for (String suffix : suffixes) { 
     PImage image = loadImage("./Images/Matt/Matt"+suffix+".png"); 
     images.put(suffix, image); 
    } 
} 
+0

似乎可以進一步分解後綴的「1」,「2」,「3」部分以減小「後綴」數組的大小 - 在內循環的成本。 – 2014-09-22 02:59:26

+0

@TedHopp這是真的。但是,我認爲OP很可能會爲每個後綴創建字符串常量,所以我在示例中保留了1,2,3末端的硬編碼。 – dasblinkenlight 2014-09-22 03:02:23

+0

這實際上是完美的,正是我想要的 – 2014-09-22 03:02:42

1

由於「LS」等,似乎有語義,我建議的solution by @dasblinkenlight的變化是採用了enum

Position p = RS; // or any other value 
int index = 0; // 0..(N_FILES-1), corresponding to suffixes 1..N_FILES 
String fileName = files.get(p)[i]; 
+0

這看起來很有前途,但是我從來沒有使用枚舉函數,其他人有沒有想過哪一個會更好(請原因)? – 2014-09-22 03:26:10

+0

我現在在想,我可能不想將每個動畫限制爲3張圖片 – 2014-09-22 03:28:27

+0

擴大圖片數量不是問題:只需參數化每個「位置」映射到的數組大小。我會編輯我的答案以顯示(無論如何,這是很好的風格)。有關'enum'類型的更多信息,請參閱[Java主題](http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html)。 – 2014-09-22 03:37:55

相關問題