所以这就是问题所在。我对间隔的concatinate函数似乎将传递给它的第一个值变为null,而且我不能为上帝的爱找出原因。
public static ArrayList<Intervals> ConcatinateIntervals(ArrayList<Intervals> intervals) {
ArrayList<Intervals> concatinatedIntervals = new ArrayList<>();
for (int i=0; i<intervals.size(); i++){
for(int j=0; j<intervals.size(); j++){
if(i==j){
continue;
}
if(intervals.get(i).getMax() < intervals.get(j).getMin() || intervals.get(i).getMin()>intervals.get(j).getMax()){
Intervals interval = intervals.get(i).Clone();
concatinatedIntervals.add(interval);
continue;
}
// 1
if(intervals.get(i).getMin() < intervals.get(j).getMin() && intervals.get(i).getMax()<intervals.get(j).getMax()){
Intervals interval = new Intervals(intervals.get(i).getMin(),intervals.get(j).getMax());
concatinatedIntervals.add(interval);
break;
}//2
if(intervals.get(i).getMin() < intervals.get(j).getMin() && intervals.get(i).getMax()>intervals.get(j).getMax()){
Intervals interval = intervals.get(i).Clone();
concatinatedIntervals.add(interval);
break;
}//3
if(intervals.get(i).getMin() < intervals.get(j).getMax() && intervals.get(i).getMax()>intervals.get(j).getMax()){
Intervals interval = new Intervals(intervals.get(j).getMin(),intervals.get(i).getMax());
concatinatedIntervals.add(interval);
break;
}//4
if(intervals.get(i).getMin() > intervals.get(j).getMin() && intervals.get(i).getMax()<intervals.get(j).getMax()){
Intervals interval = new Intervals(intervals.get(j).getMin(),intervals.get(j).getMax());
concatinatedIntervals.add(interval);
break;
}
}
}
//removes all duplicates
Object[] st = concatinatedIntervals.toArray();
for (Object s : st) {
if (concatinatedIntervals.indexOf(s) != concatinatedIntervals.lastIndexOf(s)) {
concatinatedIntervals.remove(concatinatedIntervals.lastIndexOf(s));
}
}
return concatinatedIntervals;
}
它应该返回3个间隔10,100 200,300和400,500。但我似乎得到了null
。不知道我哪里出错了。请帮忙。
这个想法是,对于任何间隔的输入,它将返回一个间隔列表10-500 og 10-100,200-300,400-500,如果有任何重复,它应该去除它并且如此他们变得更大了。
答案 0 :(得分:2)
我认为你的意思是返回的ArrayList
不是null,但是包含空元素(Interval
s),因为对concatinatedIntervals
的引用只是set等于构造函数调用,因此不能为null。当您编写Clone()
而不是clone()
时,您显然实现了自己的克隆方法。将Interval
添加到列表中的唯一位置添加在上一行中分配了构造函数调用结果的引用(因此不能为null)或将调用结果添加到{{1} }。因此,Clone()
方法是唯一明显的嫌疑人。
您是否尝试使用调试器逐行执行代码,检查添加的所有Clone()
的值?