我正在尝试为存储在SortedSet中的双值创建间隔。
以下是我的代码:
Range array: [-Infinity - 1.0, 1.0 - 2.0, 11.0 - 12.0, 12.0 - Infinity]
我目前的输出是:
[-Infinity - 1.0, 1.0 - 2.0, 2.0 - 11.0, 11.0 - 12.0, 12.0 - Infinity]
我希望范围数组为:
{{1}}
答案 0 :(得分:6)
在循环的每次迭代中消耗两个元素(如果元素的数量是奇数,则会抛出异常)。您应该在每次迭代中只使用一个:
Iterator<Double> it = val.iterator();
Double lowerBound = neginf;
while (it.hasNext()) {
// Get element
Double upperBound = it.next();
arr.add(lowerBound+" - "+upperBound);
lowerBound = upperBound;
}
arr.add(lowerBound + " - "+ posinf);
答案 1 :(得分:0)
每次it.next()调用都会一步向前转发迭代器。因此,在while循环的每次迭代中,您将松开一个间隔。使用临时变量来保留先前的迭代器值。
像
这样的东西Iterator<Double> it = val.iterator();
Object end=null;
if(it.hasNext()){
end= it.next();
//write out -infinity to previous.
}
while(it.hasNext()){
Object start = end;
end= it.next();
//write out start - end interval
}
if(end != null){
// write out end to infinity
} else {
// there were no values in the array.
// write out - infinity to infinity?
}
答案 2 :(得分:0)
问题在于以下循环
while (it.hasNext()) {
// Get element
Object lowerBound = it.next();
Object upperBound = it.next();
arr.add(lowerBound+" - "+upperBound);
}
迭代器it
在一次迭代中递增两次it.next()
,最终导致你得到的数组。
解决方案如下:
Double lowerBound = neginf;
while (it.hasNext()) {
// Get element
Double upperBound = it.next();
arr.add(lowerBound + " - "+ upperBound);
lowerBound = upperBound;
}