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],但不适用于更远。
你的 for 循环与:
int i = 0:
while (i < items.length) {
return "Name: " /* etc */;
i++; // Update.
}
如果进入循环,则开始执行正文,然后返回,因此永远不会执行更新。
如果不进入循环,则不会执行更新。
因此,您不执行更新,因此更新是死代码。
i++ 应该在第一次和后续迭代后运行,因为代码在第一次迭代本身中没有任何条件返回 i++ 永远不会到达。
这被认为是"死代码",因为 return 语句将结束函数,因此让 for 循环只打印行,然后函数在循环后停止执行。
或者,如果你想使用这里制作的行来做某事,用它们做一个字符串数组并返回
是的,您可能对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
方法,则不返回任何结果(。它不会以某种方式神奇地附加到您的预期结果中;你必须自己做。
返回数组或列表。此外,最好在Item
类中toString
方法(如果您已经有toString
,则print
(。我会这样做。
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);
}
}