2013-09-08 6 views
2

Я работаю на некоторый код, где у меня есть этот фрагментЕсть ли способ сделать этот фрагмент кода более эффективным?

{ 

    user = "B"; 
    indice = 21; 

    switch (user) { 
     case "A": 
      A[indice - 1] = "X"; 
      break; 
     case "B": 
      B[indice - 1] = "X"; 
      break; 
     case "C": 
      C[indice - 1] = "X"; 
      break; 

    } 

} 

мне было интересно, если есть возможный способ сделать этот код более эффективно, поэтому я не придется переписывать его X суммой раз там может также больше значения, то сумма в Переключается я имею установку, любая помощь будет много советов были бы большое подспорье

+0

Ну, если ваша главная забота не о производительности, может быть, вы могли бы попробовать с помощью отражения. –

+0

Я не думаю, что здесь достаточно информации. Существуют различные способы упаковки, чтобы сделать это более эффективным, но для этого мы должны знать вещи о массивах A, B и C, а также характер X и соответствие между пользовательским значением «B», и массив B может быть представлен по-разному таким образом, который подходит для их использования. – arcy

+0

да, через отражение вы можете получить атрибут объекта динамически, тогда вы можете присвоить ему значение – upog

ответ

4

Создать Map<String,String[]>, положить массивы A, B и C в ней, а затем использовать этот код:

Map<String,String[]> arrayByName = new HashMap<String,String[]>(); 
arrayByName.put("A", A); 
arrayByName.put("B", B); 
arrayByName.put("C", C); 
... 
arrayByName.get(user)[indice-1] = "X"; 
+0

Спасибо! надеюсь, я смогу реализовать это решение, большое спасибо. – Noobprogrammer1234

+1

Если более эффективные точки производительности, этот подход намного медленнее, чем оригинальное решение. HasMap для трех элементов медленнее, чем поиск последовательности в простом массиве. Говоря об этом, оригинальное решение использовало массив напрямую, поэтому я не думаю, что можно писать лучший код. –

+1

Я не думаю, что производительность - это проблема с этим кодом, который я пишу, поскольку я только что изучаю, но для того, чтобы сделать это так, как я писал, мне пришлось иметь 3 переключателя, содержащие 12 случаев, был лучшим способом сделать это для обучения, спасибо за советы, хотя! – Noobprogrammer1234

2

Если случаи вашего переключателя всегда будут последовательно (например, "A", "B", "C") и всегда будет односимвольный, вы могли бы сделать что-то вдоль линий

String[][] master = {A, B, C}; 

... 

master[user.charAt(0) - 'A'][indice - 1] = "X"; 
Смежные вопросы