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嵌套分别用啥替代?

for循环中的if else语句

如何使用python将and else语句添加到for循环中的if作为lambda的一部分

Python基础语法—— 条件语句(if)+循环语句(for+while)

Java 基本语法---流程控制

Java Review (流程控制)