public String getNOM(int i){
String name = class_name.get(i);
System.out.println(1+name);
if(isHeritage(name)){
System.out.println(3+name+ getGeneralization(name)==null);
return Integer.toString(getGeneralization(name).getNOM());
}
return classes.get(i).getNOM();
}
public boolean isHeritage(String s){
System.out.println(2+s+ getGeneralization(s)==null);
return getGeneralization(s) != null;
}
public Generalization getGeneralization(String s){
for(Generalization g : generalizations){
if (g.getName().equals(s)) return g;
}
for(Generalization g: generalizations){
return g.findSubClass(s);
}
return null;
}
public class Generalization{
private String name;
private List<Generalization> subClasses;
public Generalization findSubClass(String s){
for(Generalization gen : subClasses){
if(s.equals(gen.getName())) return gen;
else gen.findSubClass(s);
}
return null;
}
}
要成功执行,输出应显示
1String
2boolean
3boolean
但在我的测试中,即使我给出了有效的输入,输出也是:
1String
假
因此第二次打印输出中的数字2和所有第三次打印输出都消失了。 有谁知道为什么?
感谢。
PS。现在它正确显示下面的代码,我认为问题是我的findSubClass函数。
public boolean isHeritage(String s){
System.out.println(2+s+ (getGeneralization(s)==null));
return getGeneralization(s) != null;
}
答案 0 :(得分:0)
+
之前评估 ==
,这意味着您可以编写
System.out.println((2+s+ getGeneralization(s))==null);
代替。要按预期获得结果,请写
System.out.println(2+s+ (getGeneralization(s)==null));
但不会打印
2boolean
但是
2Stringtrue
显然getGeneralization(s)
会返回null
。否则第三次印刷就会发生。
您的findSubClass()
方法似乎也不正确。 (我假设您要对子类进行深度优先搜索)。它应该是这样的:
public Generalization findSubClass(String s){
for(Generalization gen : subClasses){
if(s.equals(gen.getName())) return gen;
else {
Generalization subGen = gen.findSubClass(s);
if (subGen != null)
return subGen;
}
}
return null;
}