for循环中的if else语句[java]
Posted
技术标签:
【中文标题】for循环中的if else语句[java]【英文标题】:If else statement inside a for loop[java] 【发布时间】:2015-05-19 10:47:07 【问题描述】:我有一些这样的代码,将 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]);
【问题讨论】:
您没有将最后一个Man
存储到manArray
?
【参考方案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];
当然,这段代码假定数组中至少有两个元素。如果不是这样,则必须添加一些条件。
【讨论】:
【参考方案2】:您可以在for
循环之外提取第一个和最后一个块并将中间部分留在那里。显然,您需要对提取的代码添加其他检查,主要是为了确保您至少有 1 个项目(第一个 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]);
话虽如此,这可能会降低代码的可读性,因此最好保持原样。
【讨论】:
【参考方案3】:编码的另一种选择是对每种情况使用不同的方法,例如:
retrieveManFromQueue(splitQueue);
retrieveLastManFromQueue(splitQueue);
retrieveOther(splitQueue);
当然,这需要一些“微调”,以便找到一种存储每种方法计算出的“结果”的好方法。
【讨论】:
【参考方案4】:使用此代码:
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)
【讨论】:
以上是关于for循环中的if else语句[java]的主要内容,如果未能解决你的问题,请参考以下文章
java,多层for()循环,if()else嵌套分别用啥替代?
如何使用python将and else语句添加到for循环中的if作为lambda的一部分