重新提交更详细的问题。问题是在clusterer.next()中发生的nullPointerException。下面是该程序的简化版本,我希望您能注意到问题所在。
public class Clustering {
private DistanceMeasure measure; //Manhattan or Euclidean
private ClusterMethod method; //SingleLinkage or CompleteLinkage
private Clusterer clusterer;
public static void main(String[] args) {
new Clustering().start();
}
Clustering() {
measure = new Manhattan();
method = new SingleLinkage(measure);
clusterer = new Clusterer(method);
}
void start() {
clusterer = setMethod();
clusterer.next(); //would use the ClusterMethod to do some calculations; the nullException occurs here
}
Clusterer setMethod() {
measure = new Euclidean();
if (method.getClass().getSimpleName().equals("SingleLinkage")) {
method = new CompleteLinkage(measure);
}
else method = new SingleLinkage(measure);
return new Clusterer(method);
}
}
public class Clusterer {
private ClusterMethod method;
Clusterer(ClusterMethod method) {
this.method = method;
}
void next() {
System.out.println(method.calculateDistance(0,1); //calculateDistance simply returns the 'distance' between 2 numbers.
}
}
如果我不使用setMethod();
,上面的代码可以很好地工作答案 0 :(得分:2)
如果您comment关于发生异常的位置是正确的,则method
为null
。您应该通过使用调试器来逐步执行该代码并检查语句来验证这一点。或者,为所有涉及的变量添加Sysouts。
如果这是意料之外的,请说您确信method
是由代码的其他部分设置的,请在其他部分添加断点或输出,以验证它实际上正在执行您认为正在执行的操作,并且也按照正确的顺序。
答案 1 :(得分:0)
事实证明我是个白痴:)我基本上是在某处检查
"SingleLinkage".equals("Single Linkage")
当然总是假的,并且没有为方法分配任何ClusterMethod。这里的代码很好;东西在另一个地方出了问题。