在Python中编码时,我常常通过在循环中插入return
来破坏函数/方法,例如当达到条件并且我想返回值时。我注意到如果我在Java中执行此操作,IDE(在本例中为Eclipse)似乎无法识别return
命令。例如:
protected Node getTrueParent() {
for (Edge e : this.edges) {
if (e.getNode2() == this && (!e.isPseudo())) {
Node parent = e.getNode1();
return parent;
}
}
}
Eclipse指出"此方法必须返回Node" 类型的结果。
我在做什么不对?此外,parent
在for
循环中声明,因此我无法将其返回到循环之外。一种方法是在开始时(即在循环之外)声明parent
,但这对我来说是非常草率的。写这个的正确方法是什么?
答案 0 :(得分:7)
当你在循环中找不到结果时,你错过了return
。
protected Node getTrueParent() {
for (Edge e : this.edges) {
if (e.getNode2() == this && (!e.isPseudo())) {
Node parent = e.getNode1();
return parent;
}
}
return null; // ADD THIS
}
如果您完全确定不会发生这种情况,并且您认为此处不应该返回,请抛出异常:
protected Node getTrueParent() {
for (Edge e : this.edges) {
if (e.getNode2() == this && (!e.isPseudo())) {
Node parent = e.getNode1();
return parent;
}
}
throw new IllegalStateException("Somebody broke the data. Send Help!");
}
答案 1 :(得分:3)
如果循环结束而没有返回任何内容,则必须返回一些东西。
例如:
protected Node getTrueParent() {
for (Edge e : this.edges) {
if (e.getNode2() == this && (!e.isPseudo())) {
return e.getNode1();
}
}
return null;
}
答案 2 :(得分:1)
如果e.getNode2()
永远不是this
,它会返回什么?整个方法中的所有路径必须最终返回一些东西。
答案 3 :(得分:1)
bcz你已经在if条件中包装了返回,因此编译器正在抱怨。
更改您的代码如下
protected Node getTrueParent() {
for (Edge e : this.edges) {
if (e.getNode2() == this && (!e.isPseudo())) {
Node parent = e.getNode1();
return parent;
}
}
return null;
}
答案 4 :(得分:1)
如果if语句没有成功,你忘了回来!
protected Node getTrueParent() {
for (Edge e : this.edges) {
if (e.getNode2() == this && (!e.isPseudo())) {
Node parent = e.getNode1();
return parent;
}
}
return null; // if you dont find something
}
答案 5 :(得分:1)
您的Node
课程应对您的Edge
列表进行空检查。此外,您应该为实例字段提供访问器/更改器。
import java.util.List;
public class Node {
private List<Edge> edges = null;
public List<Edge> getEdges() {
return edges;
}
public void setEdges(List<Edge> edges) {
this.edges = edges;
}
protected Node getTrueParent() {
if (getEdges() != null && !getEdges().isEmpty()) {
for (Edge e : getEdges()) {
if (e != null && e.getNode2() == this && !e.isPseudo()) {
return e.getNode1();
}
}
}
return null;
}
}
答案 6 :(得分:1)
protected Node getTrueParent() {
Node parent=null;
for (Edge e : this.edges) {
if (e.getNode2() == this && (!e.isPseudo())) {
Node parent = e.getNode1();
return parent;
}
}
return parent;
}