java - unable to produce random number? -
each object in warehouselist contains end stock, safety stock, , required stock. aim change end stock of object if lesser 10% of safety stock, , put in range of -%10 %5 of safety stock. im using randomizer code:
random random=new random(); for(warehouse obj:warehouselist){ double diff=obj.getendstock()-obj.getsafetystock(); if(((diff/obj.getsafetystock())*100)<(-5)){ diff=math.abs(diff)+(1.05*obj.getsafetystock())-obj.getsafetystock(); if(diff<0) logging.log(diff,"\n"); int randomnum=0; double reqstock=0; double end=obj.getendstock(); while(((end-obj.getsafetystock())*100)<(-5)){ randomnum=random.nextint((int)diff); reqstock+=randomnum; end+=randomnum; } obj.setrequiredstock(reqstock); obj.setendstock(end); } } }
now problem: i'm checking if diff variable becomes negative doesnt nothing prints on console, whenever reach the line randomnum=random.nextint((int)diff); program throws following error:
exception in thread "main" java.lang.illegalargumentexception: n must positive @ java.util.random.nextint(unknown source) @ managing.final.randomway(final.java:163) @ managing.final.main(final.java:252) can help?
this rather simple. @ these 2 lines:
double diff=obj.getendstock()-obj.getsafetystock(); ... randomnum=random.nextint((int)diff); your diff contains difference between end stock , safety stock. if end stock below safety stock, diff contain negative number.
nextint method requires positive integer parameter. if diff negative, you'll error.
edit: in response comment re-read question again , noticed line missed. line:
diff=math.abs(diff)+(1.05*obj.getsafetystock())-obj.getsafetystock(); you can 0. (i assuming getsafetystock return positive number - if doesn't, may problem.)
in code, checking whether diff 0 - not doing it, other printing log line.
on whole, may make sense print value of diff regardless of before using parameter nextint - debugging purposes.
Comments
Post a Comment