2014-09-22 5 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 akoto Не нужно грубить. Просто отправьте ответ. –

+0

Мне было интересно, есть ли метод без использования списка, если не так, как бы я построил этот список в цикле со всеми этими разными файлами изображений для списка –

+0

Что вы будете делать с изображениями? Что означают LS, RS, LSB, RSB, LW, RW, LWB и RWB? –

ответ

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 "часть суффиксов может быть дополнительно учтена, чтобы уменьшить размер массива' suffixes' - на стоимость внутреннего цикла. –

+0

@TedHopp Это правда. Тем не менее, я думаю, что очень вероятно, что OP будет создавать строковые константы для каждого из суффиксов, поэтому я сохранил в этом примере строки в 1,2,3. – dasblinkenlight

+0

Это я действительно совершенный, именно то, что я пытался думать о –

1

С «LS» и т.д., кажется, иметь смысловое значение, я бы предложил вариацию solution by @dasblinkenlight, который использует enum:

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"; 
    } 
} 

Тогда вы можете получить доступ к любому элементу с помощью следующего кода:

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

Это выглядит многообещающим, однако я никогда не использовал функцию enum, у кого-нибудь еще есть мысли, по которым было бы лучше (по причинам, пожалуйста)? –

+0

Теперь я думаю, что я не хочу ограничивать каждую анимацию 3-мя изображениями. –

+0

Расширение количества изображений не является проблемой: просто укажите размер массива, к которому привязана каждая позиция. Я отредактирую свой ответ, чтобы показать, что (в любом случае это хороший стиль). Дополнительные сведения о типах «enum» см. В [Учебном пособии по Java] (http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html). –

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