бу, то, что ты хочешь, очень возможно. Это будет довольно сложным делом, особенно если у вас 5 разных размеров упаковки. Я бы предложил использовать рекурсию.
создайте метод, который находит наименьшее количество самых больших пакетов, в которые может поместиться ваш заказ. допустим, он помещается в 4 больших ящика. затем возьмите каждую большую коробку и попытайтесь упаковать ее в меньшие коробки. трассы будут выглядеть примерно так, где прямоугольник 5 - самый большой прямоугольник, а прямоугольник 1 - самый маленький прямоугольник.
box5 - box5 - box5- box5
box5 - box5 - box5- box4
box5 - box5 - box5- box3
box5 - box5 - box5- box2
box5 - box5 - box5- box1
, что пробег будет вписываться в 3 больших ящика и 1 маленький ящик.
Код для поиска самого большого ящика, вероятно, будет подобным циклу while
int boxCount = getInitBoxCount(products);
public int getInitBoxCount(ArrayList<BoxItems> items)
{
if(productsFit(products,sizeLarge) == null)
{
ArrayList<BoxItems> temp1 = new ArrayList<BoxItems>();
ArrayList<BoxItems> temp2 = new ArrayList<BoxItems>();
for(int x = 0; x < items.length ; x++)
{
if(x > items.length/2)
{
temp1.add(items.get(x))
}
else
{
temp2.add(items.get(x))
}
}
return getInitBoxCount(temp1) + getInitBoxCount(temp2);
}
return 1;
}
. Это будет постоянно разбивать ваш список BoxItems пополам, пока он не уместится в число ящиков
[119 ] так что теперь мы определили порядок доставки, который будет работать, но, возможно, у него будет много дополнительного места.
Следующие 2 шага состоят в создании рекурсивного способа обрезки размера блока, такого как
// 5 is the largest
public int getSmallestBox(int boxsize,ArrayList<BoxItems> items)
{
if(productsFit(boxsize -1)!= null)
{
return getSmallestBox(boxsize -1, items)
}
else
return boxsize;
}
, и который получит наименьшую коробку, в которую мы можем поместить элементы. Последнее, что вам нужно проверить, это комбинирование ящиков. Вы можете обнаружить, что у вас есть 4 маленьких коробки, и вы можете объединить их в 2 средних коробки. после того, как вы сможете комбинировать и сокращать поля, вы сможете отслеживать результаты после каждого запуска. Таким образом, общий поток программы будет выглядеть примерно так в грубом псевдокоде.
Container[getInitBoxCount()] shipments //create an array of containers with the size of the inital box count
for(Container c : shipments)
{
c = new LargeContainer();
}
Container[] check; //create new objects into the check array. dont set one array = to anoter
do
{
check = shipments //create new objects into the check array. dont set one array = to anoter
for(Container c: shipments)
getSmallestBox(5, c);
combineBoxes(shipments);
}
while(check == shipments)
У Jordan Brough есть действительно хорошая рецензия на его блоге об этом:
http://jordan.broughs.net/archives/2008/03/creating-cross-platform-windows-and-mac-installer-cds
Если это имеет значение это было первым результатом, возвращенным из довольно простого поиска Google...
Можно использовать hdiutil
например.
hdiutil makehybrid -o [output-file] [input-folder] -iso -hfs -hide-iso [mac-only-file] -hide-hfs [windows-only-files]
То, что Вы захотите сделать, скрывают окна определенные файлы от раздела HFS и скрывают Mac только файлы от ISO.
Затем Вы использовали бы файл автозапуска, поскольку Ваш обычно будет в Windows.
На стороне Mac существует много приложений, которые можно купить для создания окна Finder, которое смотрит определенный путь, но все эти изменения могут быть внесены в средстве поиска. Затем необходимо будет скопировать файл DS_Store в CD, и средство поиска автоматически применит любые изменения, которые Вы внесли.
Также использование-hfs-openfolder заставит это открываться автоматически при вставке на Mac.