if for循环中的else语句[java]

时间:2015-05-19 10:47:08

标签: java if-statement for-loop coding-style open-closed-principle

我有一些像这样的代码,将Sting转换为对象。但它包含for循环中的if语句,以指示第一个节点和最后一个节点。有没有比这更好的编码?

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]);
    }
}

4 个答案:

答案 0 :(得分: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];

当然,此代码假设数组中至少有两个元素。如果情况并非如此,则必须添加一些条件。

答案 1 :(得分:0)

您可以在for循环之外提取第一个和最后一个块,并将中间部分留在那里。显然,您需要在提取的代码上添加其他检查,主要是为了确保您至少有一个项目(第一个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]);
        }

话虽这么说,这可能会使代码的可读性稍差,所以最好不要按原样保留。

答案 2 :(得分:0)

代码的另一个选择是为每种情况使用不同的方法,例如:

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

当然,这需要一些&#34;微调&#34;为了找到一个好方法来存储&#34;结果&#34;由每种方法计算。

答案 3 :(得分: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)