2015-05-19 6 views
1

У меня есть такой код, как это, преобразование Sting в объекты. Но он включает в себя оператор if внутри цикла, для указания первого узла и последнего узла. Есть ли лучшее кодирование, чем это?Если инструкция else внутри цикла for [java]

splitQueue = "Man-1/Man-2/Man-3/Man-4".split("/"); 
QueueSplitLen = splitQueue.length; 
Queue[] manArray = new Queue[QueueSplitLen]; 
for (int i = 0; i < QueueSplitLen; i++) { 

    // first Man, no parent Queue 
    if (i == 0) { 
     Man newMan = new Man(splitQueue[0]); 
     manArray[0] = new Queue(newMan, null); 

     // last Man, be current Man 
    } else if (i == QueueSplitLen - 1) { 
     this.curMan = new Man(splitQueue[i]); 
     this.parentQueue = manArray[i - 1]; 

     // one's parent is the previous one. 
    } else { 
     Man newMan = new Man(splitQueue[i]); 
     manArray[i] = new Queue(newMan, manArray[i - 1]); 
    } 
} 
+0

Вы не хранить хранения последнего 'Man' в' manArray'? – Blip

ответ

0

Вы можете обрабатывать первый и последний узел за пределами цикла:

// first 
    Man newMan = new Man(splitQueue[0]); 
    manArray[0] = new Queue(newMan, null); 
    // all the rest 
    for (int i = 1; i < QueueSplitLen - 1; i++) { 
     newMan = new Man(splitQueue[i]); 
     manArray[i] = new Queue(newMan, manArray[i - 1]); 
    } 
    // last 
    this.curMan = new Man(splitQueue[QueueSplitLen - 1]); 
    this.parentQueue = manArray[QueueSplitLen - 2]; 

Конечно, этот код предполагает, по крайней мере, два элемента в массиве. Если это не так, вы должны добавить некоторые условия.

0

Вы можете извлечь первый и последний фрагменты за пределами петли for и оставить там среднюю секцию. Очевидно, вам нужно будет добавить другие проверки кода, который вы извлечете, главным образом, чтобы убедиться, что у вас есть как минимум 1 элемент (первое условие if) и что у вас более 1 (последнее условие if).

splitQueue = "Man-1/Man-2/Man-3/Man-4".split("/"); 
    QueueSplitLen = splitQueue.length; 
    Queue[] manArray = new Queue[QueueSplitLen]; 

    if (manArray.length > 0) { 
      Man newMan = new Man(splitQueue[0]); 
      manArray[0] = new Queue(newMan, null); 
      // last Man, be current Man 
     } 

    for (int i = 1; i < QueueSplitLen - 1; i++) {      
      this.curMan = new Man(splitQueue[i]); 
      this.parentQueue = manArray[i - 1];     
    } 

    // one's parent is the previous one. 
     if(manArray.length > 1) { 
      Man newMan = new Man(splitQueue[manArray.length]); 
      manArray[manArray.length] = new Queue(newMan, manArray[manArray.length - 2]); 
     } 

Это, как говорится, это может сделать код чуть менее читаемым, так что может быть лучше просто оставить его как есть.

0

Еще один вариант кода будет использовать различные методы для каждого из случаев, как:

retrieveManFromQueue(splitQueue); 
retrieveLastManFromQueue(splitQueue); 
retrieveOther(splitQueue); 

Конечно, это потребует некоторого «тонкой настройки» для того, чтобы найти хороший способ для хранения «результаты», вычисленные каждым методом.

0

С помощью этого кода:

String[] splitQueue = "Man-1/Man-2/Man-3/Man-4".split("/"); 

for(String elem: splitQueue){ 
    System.out.println(elem);   
} 

Я получаю этот результат:

Man-1 Man-2 Man-3 Man-4

Что такое фактическое назначение, чтобы иметь различное лечение первого & последнего элемента, как они будут в то же место в новом массиве.

String[] splitQueue = "Man-1/Man-2/Man-3/Man-4".split("/"); 
List<NewObject> myList = new ArrayList<newObject>(); 

for(String elem: splitQueue){ 
    myList.add(new Object(elem));   
} 

myList.get(0) является первым элементом
muList.get(myList.size()-1) является последним элементом

Вы должны использовать тот факт, что вы читаете ваши String[] итерации на нем, так что новый список будет заполнен итеративно.

Я пропустил что-то, где вы могли бы дать нам некоторые рекомендации?

Я предполагаю, что вы используете своего рода «секвенированы» Коллекция (не применяется на Set)

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