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;
}
}对于成功的执行,输出应该显示
1串 2布尔 3布尔
但是在我的测试中,即使我给出了一个有效的输入,输出是:
1串 错误
因此,第二打印输出中的数字2和所有第三打印输出都消失了。有人知道为什么吗?
谢谢。
PS。现在它用下面的代码正确显示,我认为问题在于我的findSubClass函数。
public boolean isHeritage(String s){
System.out.println(2+s+ (getGeneralization(s)==null));
return getGeneralization(s) != null;
}发布于 2015-03-22 14:20:06
在计算+之前对==进行评估,这意味着您可以编写
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;
}https://stackoverflow.com/questions/29195345
复制相似问题