This is a follow up question to 3D bin packing in Java
I finished testing my code's result and started cleaning it up.
Could anyone please tell me what I should do or fix to clean up this code more?
I'm required to put a comment for every instruction line I write. English is not my first language, so maybe some of the comments are not clear enough.
private int ID;
private double length;
private double height;
private double breadth;
private ArrayList<ItemsUnit> packedItems;
private double x, y, z = 0;
private double[] remainingLength;
private double[] remainingHeight;
private double[] remainingBreadth;
/**
* initialize the remaining dimensions' arrays
* @param n
*/
public void init(final int n) {
remainingLength = new double[n];
remainingHeight = new double[n];
remainingBreadth = new double[n];
for (int i = 0; i < n; i++) {
/*
* initialize the remainingLength array to the length of the container
*/
remainingLength[i] = length;
/*
* initialize the remainingHeight array to the height of the container
*/
remainingHeight[i] = height;
/*
* initialize the remainingBreadth array to the breadth of the container
*/
remainingBreadth[i] = breadth;
}
}
/**
* put3D method
* @param item
* @param p
* @param n
* @return
*/
public boolean put3D(final ItemsUnit item, final int p, final int n) {
/*
* if x still did not exceed the container's length
*/
if (x < length) {
z = remainingHeight[p]; // update z to the position of the new item added
y = remainingBreadth[p]; // update y to the position of the new item added
/*
* if we can put the new item next to the item packed in the extreme point of length
*/
if (putL(item, p)) {
packedItems.add(item); // if item fits add it to the packedItems into the container
return true;
}
}
/*
* if x still did not exceed the container's breadth
*/
if (y < breadth) {
x = remainingLength[p]; // update x to the position of the new item added
z = remainingHeight[p]; // update z to the position of the new item added
/*
* if we can put the new item next to the item packed in the extreme point of breadth
*/
if (putB(item, p)) {
packedItems.add(item); // if item fits add it to the packedItems into the container
return true;
}
}
/*
* if z still did not exceed the container's height
*/
if (z < height) {
x = remainingLength[p]; // update x to the position of the new item added
y = remainingBreadth[p]; // update y to the position of the new item added
/*
* if we can put the new item next to the item packed in the extreme point of height
*/
if (putH(item, p)) {
packedItems.add(item); // if item fits add it to the packedItems into the container
return true;
}
}
return false; //return false if item cannot be packed in neither extreme point
}
/**
* adding the new item to the extreme point in length
* @param item
* @param p
* @return
*/
private boolean putL(final ItemsUnit item, final int p) {
double minRemL = remainingLength[0]; //the minimum remaining length of all already packed items
int i = 0; //to store the index of the item next to which we should put the new item
/*
* choosing the point (position) where to put the new item
*/
for (int j = 0; j < remainingLength.length; j++) {
if ((remainingLength[j] != 0) && (minRemL >= remainingLength[j])
&& (remainingLength[j] >= item.getLength())) {
i = j; //storing the item next to which we should put the new packed item
minRemL = remainingLength[j]; //minimum length left
}
}
remainingLength[p] = remainingLength[i] - item.getLength(); //update the remaining length of the new item added
remainingBreadth[p] -= item.getBreadth(); //update the remaining breadth of the new item added
remainingHeight[p] -= item.getHeight(); //update the remaining height of the new item added
remainingLength[i] = 0; //insert 0 to the remainingLength of the item next to which we put the new item (so that we don't consider its remaining length anymore)
x += item.getLength(); //increment x by the length of the new packed item in the extreme point of length
return true;
}
/**
* adding the new item to the extreme point in breadth
* @param item
* @param p
* @return
*/
private boolean putB(final ItemsUnit item, final int p) {
double minRemB = remainingBreadth[0]; //the minimum remaining breadth of all already packed items
int i = 0; //to store the index of the item next to which we should put the new item
/*
* choosing the point (position) where to put the new item----
*/
for (int j = 0; j < remainingBreadth.length; j++) {
if ((remainingBreadth[j] != 0) && (minRemB >= remainingBreadth[j])
&& (remainingBreadth[j] >= item.getBreadth())) {
i = j; //choosing the item to which we should put the new packed item next to
minRemB = remainingBreadth[j]; //minimum length left
}
}
remainingBreadth[p] = remainingBreadth[i] - item.getBreadth(); //update the remaining breadth of the new item added
remainingHeight[p] -= item.getHeight(); //update the remaining height of the new item added
remainingLength[p] -= item.getLength(); //update the remaining length of the new item added
remainingBreadth[i] = 0; //insert 0 to the remainingBreadth of the item next to which we put the new item (so that we don't consider its remaining breadth anymore)
y += item.getBreadth(); //increment y by the breadth of the new packed item in the extreme point of breadth
return true;
}
/**
* adding the new item to the extreme point in height
* @param item
* @param p
* @return
*/
private boolean putH(final ItemsUnit item, final int p) {
double minRemH = remainingHeight[0]; //the minimum remaining height of all already packed items
int i = 0; //to store the index of the item next to which we should put the new item
/*
* choosing the point (position) where to put the new item----
*/
for (int j = 0; j < remainingHeight.length; j++) {
if ((remainingHeight[j] != 0) && (minRemH >= remainingHeight[j])
&& (remainingHeight[j] >= item.getHeight())) {
i = j; //choosing the item to which we should put the new packed item next to
minRemH = remainingHeight[j]; //minimum length left
}
}
remainingHeight[p] = remainingHeight[i] - item.getHeight(); //update the remaining height of the new item added
remainingBreadth[p] -= item.getBreadth(); //update the remaining breadth of the new item added
remainingLength[p] -= item.getLength(); //update the remaining length of the new item added
remainingHeight[i] = 0; //insert 0 to the remainingHeight of the item next to which we put the new item (so that we don't consider its remaining height anymore)
z += item.getHeight(); //increment z by the height of the new packed item in the extreme point of height
return true;
}
class Dimension { double range, value, remaining[];…} class Whatever3D { int ID; Dimension length, height, breadth; …}
. Or at least mapping all thoseputXYZ()
method members to one implementation.) \$\endgroup\$ – greybeard Apr 6 '16 at 12:18I have to put a comment for every instruction line I make
If every line needs a comment, then it's a sure-fire sign that your code is quite the opposite of understandable/clean. Please ask the person that requested this to kindly bugger off :D \$\endgroup\$ – Arnab Datta Apr 6 '16 at 12:42