我正在尝试按照下面的列表来计算行程的持续时间(每个DepArr对象代表一个带有出发和到达日期的行程)。基本上,我想计算一次旅行的天数(arr-dep),如果旅行N在旅行N + 1的同一天到达,则必须在两个旅行之间分配到达日期。如果出发点与之前的行程共享,并且行程N + 2依此类推(例如,请参见以下示例),这也将有效。
我创建了以下代码来计算旅行的天数(同样,如果出发/到达时间相同),但是例如在示例D中,当到达日期与下一次出发的时间相同时,我将无法使其工作,下面的E和F。
有任何想法或更优雅的管理方式吗?谢谢。
List<DepArr> personTrips = new ArrayList<DepArr>();
personTrips.add(new DepArr(2, 2)); // A. espected result = 1.00 --> 0.50 + 0.50
personTrips.add(new DepArr(3, 3)); // B. espected result = 0.66 --> 0.33 + 0.33
personTrips.add(new DepArr(3, 6)); // C. espected result = 3.33 --> 0.33 + 1.00 + 1.00 + 1.00
personTrips.add(new DepArr(7, 8)); // D. espected result = 1.50 --> 1.00 + 0.50
personTrips.add(new DepArr(8, 9)); // E. espected result = 1.00 --> 0.50 + 0.50
personTrips.add(new DepArr(9, 10)); // F. espected result = 0.75 --> 0.50 + 0.25
personTrips.add(new DepArr(10, 10)); // G. espected result = 0.50 --> 0.25 + 0.25
personTrips.add(new DepArr(10, 11)); // H. espected result = 1.25 --> 0.25 + 1.00
personTrips.add(new DepArr(12, 12)); // I. espected result = 1.00 --> 0.50 + 0.50
personTrips.add(new DepArr(13, 13)); // J. espected result = 0.66 --> 0.33 + 0.33
personTrips.add(new DepArr(13, 14)); // K. espected result = 1.33 --> 0.33 + 1.00
personTrips.add(new DepArr(15, 16)); // L. espected result = 2.00 --> 1.00 + 1.00
for (int i = 0; i < personTrips.size(); i++) {
DepArr personPrev = personTrips.get(i-1);
DepArr personThis = personTrips.get(i);
DepArr personNext = personTrips.get(i+1);
double base = personThis.getArr() - personThis.getDep();
double depQuote = 0.5;
double arrQoute = 0.5;
// dep this = arr this
if(personThis.getDep() == personThis.getArr()) {
base = base + depQuote + arrQoute;
}
// *** DEP
// dep this = arr this = dep next
if(personThis.getDep() == personThis.getArr() && personThis.getArr() == personNext.getDep()) {
base = base - 1 + 2 * (depQuote + arrQoute) / 3;
}
// dep this = dep prev = arr prev
if(personThis.getDep() == personPrev.getDep() && personPrev.getDep() == personPrev.getArr()) {
base = base + 1 * (depQuote + arrQoute) / 3;
}
// dep this = arr prev
if(personThis.getDep() == personPrev.getArr() && personThis.getDep() != personThis.getArr() && personPrev.getDep() != personPrev.getArr()) {
base = base + 1 * (depQuote + arrQoute) / 2;
}
// *** ARR
// arr this = dep next = arr next
if(personThis.getArr() == personNext.getDep() && personNext.getDep() == personNext.getArr()) {
base = base + 1 * (depQuote + arrQoute) / 3;
}
// dep this = arr this = arr prev
if(personThis.getDep() == personThis.getArr() && personThis.getDep() == personPrev.getArr()) {
base = base - 1 + 2 * (depQuote + arrQoute) / 3;
}
// arr this = dep next
if(personThis.getArr() == personNext.getDep() && personThis.getDep() != personThis.getArr() && personNext.getDep() != personNext.getArr()) {
base = base + 1 * (depQuote + arrQoute) / 2;
}
// *** DEP and ARR
// dep this = arr this = dep prev = arr prev
if(personThis.getDep() == personThis.getArr() && personThis.getDep() == personPrev.getArr() && personPrev.getDep() == personPrev.getArr()) {
base = base - 1 + 2 * (depQuote + arrQoute) / 4;
}
// dep this = arr this = dep next = arr next
if(personThis.getDep() == personThis.getArr() && personThis.getArr() == personNext.getDep() && personNext.getDep() == personNext.getArr()) {
base = base - 1 + 2 * (depQuote + arrQoute) / 4;
}
Double usage = base;
log.info(i + " " + personThis.getDep() + " " + personThis.getArr() + " " + usage);
}
我正在尝试按照下面的列表来计算行程的持续时间(每个DepArr对象代表一个带有出发和到达日期的行程)。基本上,我想算一下...
建立一个Map
来计算提到的每一天的频率
我建议两件事。