我有一些类似这样的代码,将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]);
}
}发布于 2015-05-19 18:50:38
您可以处理循环外的第一个和最后一个节点:
// 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];当然,这段代码假设数组中至少有两个元素。如果不是这样,您必须添加一些条件。
发布于 2015-05-19 18:52:19
您可以在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]);
}话虽如此,这可能会使代码的可读性稍有下降,因此最好还是让它保持原样。
发布于 2015-05-19 18:53:17
编码的另一种选择是对每种情况使用不同的方法,例如:
retrieveManFromQueue(splitQueue);
retrieveLastManFromQueue(splitQueue);
retrieveOther(splitQueue);当然,这将需要一些“微调”,以便找到一种存储每个方法计算的“结果”的好方法。
https://stackoverflow.com/questions/30323466
复制相似问题