簡體   English   中英

for循環內的if else語句[java]

[英]If else statement inside a for loop[java]

我有一些這樣的代碼,將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]);
    }
}

您可以處理循環外的第一個和最后一個節點:

    // 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];

當然,此代碼假定數組中至少有兩個元素。 如果不是這種情況,則必須添加一些條件。

您可以提取for循環外的第一個和最后一個塊,並將中間部分保留在那里。 顯然,您將需要在提取的代碼上添加其他檢查,主要是確保您擁有至少一項( if有條件, if第一項),並確保有至少一項( if有條件, 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]);
        }

話雖如此,這可能會使代碼的可讀性稍差,因此最好保持原樣。

另一種編碼方式是針對每種情況使用不同的方法,例如:

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

當然,這將需要一些“微調”,以便找到一種很好的方法來存儲每種方法計算出的“結果”。

使用此代碼:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM