[英]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.