首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >for loop[java]中的If else语句

for loop[java]中的If else语句
EN

Stack Overflow用户
提问于 2015-05-19 18:47:08
回答 4查看 1.7K关注 0票数 1

我有一些类似这样的代码,将Sting转换为对象。但它在for循环中包含if语句,以指示第一个节点和最后一个节点。还有比这更好的编码吗?

代码语言:javascript
复制
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]);
    }
}
EN

回答 4

Stack Overflow用户

发布于 2015-05-19 18:50:38

您可以处理循环外的第一个和最后一个节点:

代码语言:javascript
复制
    // 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];

当然,这段代码假设数组中至少有两个元素。如果不是这样,您必须添加一些条件。

票数 0
EN

Stack Overflow用户

发布于 2015-05-19 18:52:19

您可以在for循环之外提取第一个和最后一个块,并将中间部分留在那里。显然,您需要在提取的代码上添加其他检查,主要是为了确保您至少有1项(第一个if条件)和超过1项(最后一项if条件)。

代码语言:javascript
复制
    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]);
        }

话虽如此,这可能会使代码的可读性稍有下降,因此最好还是让它保持原样。

票数 0
EN

Stack Overflow用户

发布于 2015-05-19 18:53:17

编码的另一种选择是对每种情况使用不同的方法,例如:

代码语言:javascript
复制
retrieveManFromQueue(splitQueue);
retrieveLastManFromQueue(splitQueue);
retrieveOther(splitQueue);

当然,这将需要一些“微调”,以便找到一种存储每个方法计算的“结果”的好方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30323466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档