我有一些像这样的代码,将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]);
}
}
答案 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)