r);
}
break ;
default :
break ;
}
}
}
}
}
/**
* Розрахувати розмір. Розрахунок проводиться за масою і обсягом.
* @ param i Об'єкт.
*/
private double countSize (Item i) {
return i. volume * i. weight;
}
/**
* Отримати кращий контейнер з підходящих. lt; p gt;
* Кращим контейнер з мінімальним вільним місцем (вантажопідйомність або об'єм) під упаковку об'єкта.
* @ param containers Контейнери.
* @ param i Об'єкт.
* @ param map Карта упаковки.
* @ return Кращий контейнер.
*/
private Container getBest (Collection lt; Container gt; containers, Item i, SortedMap lt; Container, List lt; Item gt; gt; map) {
return getValid (getValidContainers (containers, i, map), i, map);
}
/**
* Отримати контейнери, придатні для пакування об'єкта.
* @ param containers Контейнери.
* @ param i Об'єкт.
* @ param map Карта упаковки.
* @ return Список контейнерів, в які можна упакувати об'єкт.
*/
private List lt; Container gt; getValidContainers (Collection lt; Container gt; containers, Item i, SortedMap lt; Container, List lt; Item gt; gt; map) { lt; Container gt; validContainers= new ArrayList lt; Container gt; ();
for (Container c: containers) {
if (canPack (c, i, map)) {. add (c);
}
}
return validContainers;
}
/**
* Отримати контейнер, в якому залишилося найменшу кількість місця для упаковки об'єкта.
* @ param containers Контейнери.
* @ param i Об'єкт.
* @ param map Карта упаковки.
* @ return Контейнер.
*/
private Container getValid (List lt; Container gt; containers, Item i, SortedMap lt; Container, List lt; Item gt; gt; map) {
double minimalRests=0;
for (Container c: containers) {
double rests=getRests (c, i, map);
if (rests gt; minimalRests) {+=rests;
}
}
for (Container c: containers) {
double rests=getRests (c, i, map);
if (rests == 0) {
return c;
}
if (rests lt; minimalRests) {= rests;
}
}
for (Container c: containers) {
if (getRests (c, i, map) == minimalRests) {
return c;
}
}
return null ;
}
/**
* Отримати залишок. lt; p gt;
* Залишком вважається найменше значення із залишку по вантажопідйомності або залишку за обсягом.
* @ param c Контейнер.
* @ param i Об'єкт.
* @ param map Карта упаковки.
* @ return Залишок.