Writing to the wrong class instance in java -
note: code work in progress solution assignment in discrete optimization pascal van hentenryck on coursera. of not want see possible solutions or hints might not want read further.
i new java might totally wrong code. have spent while on code no progress. stepping through code in eclipse.
when step through code below trying update instance of branch[0]
when update branch[0].path
thisnode.path
gets updated , when update branch[1].path
branch[0].path
, thisnode.path
gets updated (at-least watch window shows).
what doing wrong here ?
void iterateonestep(bnbnode thisnode, int next_path){ bnbnode [] branch; branch = new bnbnode [2]; //item not picked branch[0] = new bnbnode(items.size()); branch[0].availablecapacity = thisnode.availablecapacity; branch[0].path = thisnode.path; branch[0].path[next_path] = 0; branch[0].val = thisnode.val; //item picked branch[1] = new bnbnode(items.size()); branch[1].availablecapacity = thisnode.availablecapacity - items.get(next_path).weight; branch[1].path = thisnode.path; branch[1].path[next_path] = 1; branch[1].val = thisnode.val+items.get(next_path).value; ..............
the class bnbnode
public class bnbnode { int[] path; int val; int availablecapacity; int potentialval; int optimum; bnbnode(int numitems) { path = new int[numitems]; numitems--; while (numitems >= 0) { path[numitems] = -1; numitems--; } val = 0; optimum = 0; } }
the full code @ https://github.com/vinaysamuel/knapsack/tree/master/src
thanks time, vinay
look @ these bits of code:
branch[0].path = thisnode.path; ... branch[1].path = thisnode.path;
the type of path
int[]
, means you're copying references. you've got single array object, , after code above, of branch[0].path
, thisnode.path
, branch[1].path
refer single array.
you may wish clone array create independent copies:
branch[0].path = thisnode.path.clone(); ... branch[1].path = thisnode.path.clone();
Comments
Post a Comment