for loop有"死代码"在i ++

时间:2018-04-30 18:51:44

标签: java for-loop dead-code

public String toString() {
    for(int i = 0; i<items.length; i++) { //i++ is considered "dead code"
        return "Name: " + items[i].getName() + ", Is carn? " + items[i].getVeg() + ", Pop: " + items[i].getPop();
    }
    return null;
}

此方法应该通过一个数组并返回名称,veg和pop。适用于[0]项但不能进一步使用。

5 个答案:

答案 0 :(得分:1)

你的for循环与:

相同
int i = 0:
while (i < items.length) {
  return "Name: " /* etc */;
  i++; // Update.
}

如果你进入循环,你开始执行正文,然后返回,所以你永远不会执行更新。

如果您不进入循环,则不执行更新。

因此您不执行更新,因此更新是死代码。

答案 1 :(得分:1)

i ++应该在第一次和后续迭代之后运行,因为代码在第一次迭代中没有任何条件返回,我将永远无法达到。+ / p>

答案 2 :(得分:0)

这被认为是“死代码”,因为return语句将结束函数,所以让for循环只打印行,然后函数停止循环后执行。

或者,如果你想在这里使用这里的线条,从它们中创建一个字符串数组并返回它

答案 3 :(得分:0)

是的,您可能对return语句的作用感到困惑。我认为您正在尝试执行以下操作:

public String toString() {
    final StringBuilder result = new StringBuilder();
    for(int i = 0; i<items.length; i++) {
        result.append("Name: ").append(items[i].getName())
              .append(", Is carn? ").append(items[i].getVeg())
              .append(", Pop: ").append(items[i].getPop())
              .append("\n");
    }
    return result.toString();
}

return语句完全相同:它立即从方法返回并返回结果(如果是void方法,则返回结果)。它并没有以某种方式神奇地附加到你的预期结果;你自己必须这样做。

答案 4 :(得分:0)

返回一个数组或一个List。另外,最好在toString课程中制作方法print(或toString,如果您已有Item)。我会这样做。

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Demo {
    private Item[] items;

    class Item {
        private String name;
        private boolean veg;
        private String pop;
        /* Constructor, getters and setters */

        @Override
        public String toString() {
            return "Name: " + name + ", Is carn? " + veg + ", Pop: " + pop;
        }
    }

    public List<String> listItemsString() {
        return Stream.of(items).map(Item::toString).collect(Collectors.toList());
    }

    public String[] arrayItemsString() {
        return Stream.of(items).map(Item::toString).toArray(String[]::new);
    }
}