Java:在列表中查找组合日

问题描述 投票:0回答:2

我正在尝试按照下面的列表来计算行程的持续时间(每个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对象代表一个带有出发和到达日期的行程)。基本上,我想算一下...

java list arraylist combinations distance
2个回答
0
投票

建立一个Map来计算提到的每一天的频率


0
投票

我建议两件事。

© www.soinside.com 2019 - 2024. All rights reserved.