printout函数中的java变量消失了

时间:2015-03-22 14:05:34

标签: java

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;
}

1 个答案:

答案 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;
}