From 065b8a8488d10f7cdd6bab89bb90b713fdc6501c Mon Sep 17 00:00:00 2001 From: Nojipiz Date: Mon, 2 Nov 2020 10:21:59 +0000 Subject: [PATCH 1/3] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e86a2c0..f6ec528 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ And I want pieces example 700(mm) * 4 pieces 500(mm) * 3 pieces - 250(mm) * 4 pieces + 250(mm) * 6 pieces 320(mm) * 5 pieces To cut this efficiently by minimizing the waste, here is the code. From 03e61de89ae4d97d0bef6585f104adf7e49a6c35 Mon Sep 17 00:00:00 2001 From: Nojipiz Date: Mon, 2 Nov 2020 12:01:39 +0000 Subject: [PATCH 2/3] Optimized Time --- .idea/.gitignore | 3 +++ .idea/.name | 1 + .idea/misc.xml | 6 ++++++ .idea/modules.xml | 8 ++++++++ .idea/vcs.xml | 6 ++++++ Cutting_Stock.iml | 12 ++++++++++++ src/org/optimization/CuttingStock.java | 20 ++++++++------------ 7 files changed, 44 insertions(+), 12 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/.name create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 Cutting_Stock.iml diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..e0783ec --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +Cutting_Stock \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..ba93b15 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..2fe4f54 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Cutting_Stock.iml b/Cutting_Stock.iml new file mode 100644 index 0000000..26db12c --- /dev/null +++ b/Cutting_Stock.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/org/optimization/CuttingStock.java b/src/org/optimization/CuttingStock.java index f10abee..bb36cad 100644 --- a/src/org/optimization/CuttingStock.java +++ b/src/org/optimization/CuttingStock.java @@ -1,9 +1,6 @@ package org.optimization; -import java.util.HashMap; -import java.util.List; -import java.util.ArrayList; -import java.util.Map; +import java.util.*; public class CuttingStock { @@ -29,14 +26,13 @@ public synchronized Map nextCombination() } public CuttingStock(int max,int block[],int quantity[]) throws InvalidLegthException,InvalidParameterException - { - for(int i=0;imax) - { - throw new InvalidLegthException(); - } - } + { + Arrays.stream(block).forEach((p) ->{ + if (p > max) { + throw new InvalidLegthException(); + } + }); + if(block.length!=quantity.length) { throw new InvalidLegthException(); From 4d70c7c1851fddc359f8686cc51e96ba0f97e36a Mon Sep 17 00:00:00 2001 From: Nojipiz Date: Mon, 2 Nov 2020 19:47:08 +0000 Subject: [PATCH 3/3] Optimized Time --- bin/org/optimization/CuttingStock.class | Bin 4955 -> 6583 bytes .../optimization/InvalidLegthException.class | Bin 401 -> 401 bytes .../InvalidParameterException.class | Bin 430 -> 430 bytes bin/org/optimization/MainClass.class | Bin 2115 -> 2351 bytes src/org/optimization/CuttingStock.java | 88 ++++++------------ src/org/optimization/MainClass.java | 6 +- 6 files changed, 33 insertions(+), 61 deletions(-) diff --git a/bin/org/optimization/CuttingStock.class b/bin/org/optimization/CuttingStock.class index 042ab0c4928f28ba5c2cacdc962f51650fb50122..2d6ca4fcc462f8b640b210b2a76a9d26e09a5d3f 100644 GIT binary patch literal 6583 zcmcIod3aRS7608?^2lVeldvR#5km+eB!WUjAc6>(HV_00C|Y@$Op<}gOqhkuYOSW# zwr-_vPzy@YXw_EG1O!FIwpMFxwN~p=(YjQvTJ`(%Q$*?S-1jmw3DK|pqhjv6@7#0G z`n%`cH;;e0cRzqSe3*$ETqwguGJMyAA-LGU_dKY@B|^E>K$j3N@!;`YI15+c zN&{DUkZti?EsWR5@Dmv}$?#JThihfHPKN8V(2g52aU(Vl!4?mGhMPp-&kLY%a~5vF z_5wI?tFYcC+q-3Uy9{^8@Jku)l!d!wxZA+5JQycN{TlaV!Hu0_<1SIMs{l^iXQ0PG zuY$Wd6!EWCaI9!haIT4OP;mJp9nA_u;(?A%Yw8XKJA!epcbMxH6gl1TNZbr582(5i z91lcES!c%L0a7~5&cpVp|IVIEugSD z3`dX#2P5GaV^BH%9L8u)q=i~?8-wA%!bC@NAbOVB93rKlG2%BvOU-Cd-ff~Q-X7%E z(T$O4TWzE>&S-Ab@@nTK;_+a(ZAqL-p!L~H;--H!eYQ8|h6C&4Y5EoNE61m~K~C;s zS~|s+RJbjAaerGjboSX(*PnH;Kv*0D0<17?p!)w|Z^n#ZI2f-dvML)^@Zb2QoUTcj z;dn5yT8`#Zv*$^~C!HtY81J4Z}f!X<{z=;`Jk!EI7^QwSf@a2j{ zq5{@<2cx1^31OWCNHK4jOpZShG6kuHm1$wn7!d_3s6k|khzx(b8Hz+Gp*bLkcE%DN z2KFda4%|9e80x2M4`c0-b&^7bp_L7TX*A@ZF=NziQdMinY*QG24DVN~@X9GoAv9B> z)@YyDmf%{2tVCxEUAAeN(LgMqQN;cGq67o5Akupi-&R0z$0G#2ESFP zIOZHSgx3;gEscS;czY6rUYv?qUYsoUO_kvUO!8u~49mr+b7e5m?8Wc!sDa;m@faSb z^f|KH7V8BA%w>`?GkvSg&4AB!#>VTtCL?!hZ~l?RBjmr6VQ2REC3 zDJTlZClzYpt%KJ`jlsx zTqR_tFs#E|%?=#)oAG7Ac)Li5vttk##ZqJ}EgD3&zkMe_)0kelE-*$s-ibg{tKOEr z%jS?S+9{zwd63eVrlhYJ9!sJCv!!J~4*J;T#xSv7{HYj3e!4xj7Y5$+;-C1J7aOqA ziv-phcvsHsdkSMxXEGRG8(AHwZPZ1aWzTFi{k;FMHD>W7_PrVSH;+PNB(gfe0`6@H zhXc_$Au|>WFpN*68)VC~3g{VTxFr;bm0KIruUxi~X+h|>@hsjn(%Jv}MN8$^?@f=E zEqRU^3M~o71I%LiF~PBnwIDRFFFZH?|Gl<@^wlR%BXpn#20l<2dyEr-lgT zt6(j^NWA=XVDIA0A?-^)*-G@2okKs_JoJ-|PCwc8^po9LKiPrxlZ~36Bs2BAp7Pit zlkcWBq>p=DXiTk%9Yag=7l=D!EJGZKOe-HAiN_rTi>K+tSP3%Eo zRWF9_OgeE2ayT!c+Dy)}=twq3p%fDtmy;c13D&Z(|fK;+L_-E{;D(Gc81%vY% z8ePkLoWRUYBF|)0^A>a}9TucmIhtGafP><1=#njBE?WYk_r}N)jCTbono{#g$<7e302yyXDl2yUjK$jssj|Fx5;ZXS8dktKK=) z<(%r4H03?u>4C3wvpSw@$C2oqno*P?3)@j$Gpo>Ns5-Q0)D2Nn5a7&- zEH#;O>llw5RZ9fd5q^DDRAih=iAtli4*5qJstlGC1MQ0c0Y{LnCJ?dZM_4HiqttN( z4mIj9j3Sx%MsUetm*61r%nu(M)tjg$gQ%V+CEp<>-{Gt;*@EysjAMDNJVh|BK}jsn z)yQ$zY{rxkF3t;z+%dQ7GheYQHS1%?k z+u4l+gQ=<|%UEvTjL`#B2{oxo3w<&rPP{PqnqSgFSBz?Fs@ba@SeE9?XfDw{YZNO* zu5IPZX?&$A4xez`1lLZj_0_79YM#&(qAy}?0=5wwx3Jc3M;>;tz1+%XavPC+J8RM% zEGM@zw|5f5ccX(pE3U&m#Ol4oXD^Yvo7mffE!fMq-SR=sZ{h>IuRe@7a1bBj5w?(n zDw|*5Bk-u2fX7rd=acb-IvGzUky%Pjf;~62pU*S0keIrR-?bL)E!v}JDv#~XqIKau zn~y+9qIDWA)UAy)!L0*cHIb)I&??CE@o8yTL=BbgmMc zVdOc!K$Z|{_<95r2w39Qp-S|s+s0{x0{E3~H=uhdSX$#krh~mldWf$?(pFKz3YMo| z&#iH-Z0g2D!dJ59bLw>`*R%O5ySk4)t~s4eUFvA}(Fap)rh@kYus9ej4#jwu&OOHx z^dh_aOLYAZgZm2a1h4BLOT#o+#3Xn;dkk>ul9dJ55g4kZ^e{2tkRKdu2lmqeCzeDAYCen89Lp`9OTt0i4NmaV9^T7C@@`z5CH)9fDx*B7*$mzHsG%B6)4 zW__kxA%7#WeYx09MzwQ>+#Kmaxfs`%kL{MhvP2p~O@m)Z8C*PKcWMPvH`ygOj ztrfNPZR?{jRK(Km*gB51rctTbm(!8jx6{tp*XUR~OvjnpspE*0^!v}f$!-ukHSRtC zIp;tB^ZWmEFDK5tcpSjR_?jOcg_>k)pgB2`i4VnZwlneMaP#VHCKDeX*px~3?exP` zn6<;+Z8sNjDoi}!CeKh+jE9Y zd|7N^7RpOdk0pMD6-uWk%R&Ph8H#}zGa0Dsa@7}Lr`3;Unw~#Kt29LTEc=+TmD2;X zcVse1%cisb-##e#+Tz3UOb3x#*R_p*^_vxnuiVoYV+}Bmek@nG@MEFx8s2Ru;?YQK zATv0{?8l`F;ZNed+D_R+F`|5mzZeGEEG$L4M$2Xi=w%klVEM6%u*wHzRVrog6(|;C zCEA4V3JVn|FUB%wy2ipx2VGqjN*wAc3tsqydA$Wce8r@?EnF??%xJQUDJj~OwTClt zsaF+uS+29NSy+lCE^&H!b4*TNZ(*xGnNFr?hQc-rH{vE%BO%+DP1sVlbLtB6psQ8F zX=H|&O*1_zsZ}frwL_uqY}Rw-tfRGlv*?Oih>7wUVpBxgh`2Rip~!J7ZefS)TheJJ zOHd9bEDT|oj;05bqf!eB6?JF#3|GmBg2R%#9wI89lNl^vEjFBRjAjS!{Y_ z7o*hKnw~>>EUu|}fOGb4?pa)$i+Oxjakh@@iep*$IaKo(dJvl6vj6A?Uu`E&zVz@Gs%lamXukn$W07HRoAx#b~44P{>_I$l7X2R}qpB)pX~ zvu6y|OP=Mr+aaL31S8CHl9 z>H-?!o_hSqh(X%YT2qbTFe|O8vv2;f67+3pb7-LS-9{PI=ZzJ3)U;+FZ&=R`I!z zF|23Uni;rdScJ<+ccG5$EsX1V?QBOQ`d9^njRDriaPRZkGrO5vggC-H5<6 zB1fG?vnSYXw(m2PtaqBx!xOpCfr*3pthO+dV6Hs8Sp3+=vbu@3O5Q$06xy_~7gsTd z*CNX3Y$Y|ozd`L!*sHOMui#g{{Uz{{<50iQ&y zpTl5Ji&w9$J%SnJ%AstZPX&A;;PAxj0q^73=IlSgu3;=0$4<&i@|SW{<H{4p>%B1hb7Tm$)+{J7EZl1n}C+L8YMlDBDwNa9^jeg$o1ceJYp`07Sr_pn85xzb8}wAX1WK8$0ryY>Og*4dqG%#MZt(JEKOrKp%- z$b3YvAN7j=0jK#5v4GvDXyIv8t68T|avEOtSgr(wnp^3SU0TLBpec}lUW5Ea+QEBK z#pEIh$wd+}I)VrA;4$37ZvBNz1@bv;*GTdtoQVo1M)!=Q4>SjV;>C_Mi#`On*EqX^1>?f1>EhymZM>#fi;oCiRs2H zB~zAy_G9rU7$dth%`v7x#jAzl#p4bxtPMu#c1MFlK9Bny?b`1U7pHk5lB3-PBHz?} zRSw^juLofsEns>(928IT#c(J4G4K+h^fICFBX;VaFdaW7z+T~9_A{){s*P9(CAq)uXMKOL-r4kyz0A`*Yi9o7xo4wf>(@OL;XQX$7qm!Phiy_ys^pb z>CT~%@Rq#x8+za1{!C8gRBqyg<}|wZsfpagOZh7*ELD&9c_Dnj*S8NDtW$j5IK%5{ z0xOjVYm~va!1uA9R!dNw*R2h1Q2prCL2zoA0Xhx83WjE!qRk%ppmDwUCB0yPux6^) zk4jg)h(@jDZ(XPK*DnYU0SEVXN zkZo>}n#C{f*=XfjCo?8y>-=DiYj%(>KBBQ;vGGV2Jvu*&<^87&hQ30<2-Ip?dQr&) zc_ueV@{7s!?G`sf4MtlI=ZmqE`FYZDAn2?y^h!uN@aMb(mGZJiID1tUDpWP*lU||< zUu_#)qdhDjG1ZB65e#X8)e>iZ)48_97-d1rJh4UM*dLUXPwIUyuXi@BhN`8A`7DE4 d%vI+XKKsl=+rCH8jH*8Cab2 zQ&J~xZJwB~!pg(I${;k6S97AJ{KWZUYz&GF%nU4(?HJ`u8MiYqZ3LRf#J~Y0xqvhS c13Lp7kjDvR@h~ug`CJU#K$;QA2dU%*0K3znvp>e JNHQ@90RUSX93KDx diff --git a/bin/org/optimization/InvalidParameterException.class b/bin/org/optimization/InvalidParameterException.class index ef71a2d8a079c26b7c89c294e15afb2d97dd52e5..be4f5dc74781a630c3b17b01bc35579b5265eaf0 100644 GIT binary patch delta 156 zcmZ3-ypCD#)W2Q(7#JAL8H70)__!EY82H&41lSn_85!7YGV?M^>=+rCH8jH*8Cab2 zQ&K0M>Yi9^%F4sQ${;k6S9hYVyo{)ZPgY`CqJBvCfmSdvZ~#dzAkDzQ&cFubaROO942)nt7XvqtW(4v3zfCMIYxvoo+vR$!DDXS2!7%Pg^DWMJ0N3}a+q zan4UkmwfoHNUqr^nLZZ-x*2B5;p(TsAY9NQVVHUbT0V&Dam jTtJ$Eft`VkfrEh$$l?L21M&G81b{RngCLM(Vh{oVKnxQf diff --git a/bin/org/optimization/MainClass.class b/bin/org/optimization/MainClass.class index e3afa0574a74546e3af7250496be0a90fbaaf848..4904e7daf4b319bc20998670f7209644c6dea321 100644 GIT binary patch literal 2351 zcmb7GO>7INQ(NnHb*1c`dupjd8r!jf+Tk6ZF0wE=gp%(Suou z%X-fCL*S~!2NF4f$dv8aYFZ$e8l4je&A3aJKwrjotjqPvqUBvP7t56NXWW8Wo-;jL zzqf=TwQSb}_GVnKIObNBU9s<(%66TxS<`lA%4V%LNt+eE2n?kbGArh)IaW5E;#f|3 zwo{zcK7%D|O<=&cnRb*_v^-+Nt7f@Q_hHLX9<{>fo3oL29LsBXuo%H$6I@qznXaoN z4K2ch6|<_dY4~mL>X1yYNZ7y*5s{L`vRf!|JFt)zh~251j6h0%(6_g2lm z$H8D=wysU2w9K{QRnr#kWf1KE>PW}!sl z8s{o;SYlM-n#709Kj+rHf_1^xRnWV6uE#Z{26kakVBfam_ou9t<_uiN4T-#gc`OLT z&$+IuDbK9VT58!{s`W*1Gm4K4e2iNXpBON)XrO>40~T&e6b&rHHn4&l21+RN>^jc0 zNtS_%-b!qhS*wx^I4DQqYWpmRJ=+4_%!{#Yp|guCRzV5$bogR3Y`v$I<(bO$SQDxA z0)KTy4=kItS=X~>+{&WuG&+LC!w#G8FrQniDXYQ_w@xRm8n)fBD{KwL2C>Wv+x-q` zJQ4HR8g|@aA+Wn*mgvGMnCiN%mbt1amMT3BrqZLnB5Czno3l<20*HqC)kLE1q(z#6$%hN|L10%~ zvvG+u&xd-EqNOhBTO`WGT=UA1VtDw-uqJB4pH};B@nzZ;?ZBBtP1nq-z{plv*v_h3 zvRYSI^8hZG1s1`Y#9aoHaotj#W%iZdZwu6{_lu^pRJLj(P0dMPEUmNhNjiYncwOwE z?!U)cr1+C*nV2!l>YA1SHJIUeC6F2mW`;B+GR*Ldhh z1oDHSqsN{gI1x!k9wYP+D?cE7KPdJ+WwdwHT5U2IZ z5cnBA6VYUJ9ld(pH_@fn@#Z>4i^;BJ>?slri;p&bd9?ARW+ep8$~ZsFKny3D^*nho z(aS5V53AJwf&@Px#ov+IXJqF&5x1$o`iC)$mk}lU zDn@XKoRU$zLOJN^8>BEwzUOftN4N^$CO*ee97B-)Kf|kBg&0K@$9b3$yhhXzwVHNc z-?V#zc29CIgU|-mrNkQ&Z}N|=C-qTo&}h^rl^Ca7@_!Tjjk6n6*^XfhZ_#D|r|}Z! eey)1R(!od<6h1|rHS;#*y_CPh9L_byEB^vs%}|m6 literal 2115 zcmb7FO;cNC6n z!Wp~it}ACc)@|47Oc*TVxN_mb`ePgyIwL;sO;Qq|3n$6@b1P1v zu&JO$px3f)m9BjBGfOvAY> z;E4_|2zaNgB|QWWf+~FQ3mly_Ontsw$msTUEtA&;I%ch`mS50pL+)#bUT4`T3G~lC z--B_Y7wC>acXV-f&y$p68)j~NctJr}VBi42RM~N;kaDc-Y6$J_a6;TW` zGRLZtB5*8v(1f}taazGCflk-&=7?0Bk&Y=v8D!p+l$}*Eir1M;Q(t!)f)NPU@ym{p zXSEc^TX7y26ucqO=7QG+DlTG-zUii8Z=`hc*=)-r+Qu=VfSGQvr9j0cu*3p}quZKe z*|G#`ak=n`+BpH<#-xIGSY>;c*QF|^@Ggr;2C<)+YB@8RGj&qxexI0@4!2?&S5zb< zfIp`@SM?1AR~f@z;uEH$=X6_Y&Z(G}ngMDqX!$Z|1p^Y;|AqHGI$ z`H@v4pk^E1sledDPSE&}Y2b4!>DjYv&KKpLRegglH}Fx*khEQsSz#G9_o9try&qj{ z_HW`4ltYd#6Z%rKWwm_%hkaYh(Xy-L#O;gyM92M?joCRm!$QADVAd^N42WJxsAIZj^HRy zXe|CBkkojp?1a*uaLZ0I?G1}RlWAWVe<#!au=pZ5>&g^L{5)^x;149{JeR}D9~Zn& z(4Ow{o;-Xb9xt^`ALp9JXBqPBJu63j;_$U(Mss>GnPXr$BR^%n0 zKHU9M(%^-pA`jHPc!^02tz{$meGlO=)wd3Ydk^^cDVnQ^54nHV5x6omLb$3d;NnnZR~n7iSS{I8|_7 io-1q*_y?1_yyc(~FIppL3qHp>=MV#$W~1Nm2mb?I=>@R> diff --git a/src/org/optimization/CuttingStock.java b/src/org/optimization/CuttingStock.java index bb36cad..4d5cb82 100644 --- a/src/org/optimization/CuttingStock.java +++ b/src/org/optimization/CuttingStock.java @@ -1,79 +1,54 @@ package org.optimization; import java.util.*; +import java.util.concurrent.atomic.AtomicReference; public class CuttingStock { private int block[],qty[],comb[],tempcomb[],limit[]; @SuppressWarnings("unused") private int max,total,counter=0,waste=0; - private List> mapList=new ArrayList>(); - private List store=new ArrayList(); + private ArrayList> mapList=new ArrayList<>(); + private List store; private int count=0; public boolean hasMoreCombinations() { - if(count nextCombination() { - Map map=mapList.get(count); - count++; - return map; + Map map = mapList.get(count); + count++; + return map; } public CuttingStock(int max,int block[],int quantity[]) throws InvalidLegthException,InvalidParameterException { Arrays.stream(block).forEach((p) ->{ - if (p > max) { - throw new InvalidLegthException(); - } + if (p > max) + throw new InvalidLegthException(); }); if(block.length!=quantity.length) - { throw new InvalidLegthException(); - } + + store=new ArrayList<>(); this.total=block.length; this.max=max; this.block=block; this.qty=quantity; - this.doIt(); + this.initialize(); } - private void doIt() - { - this.initialize(); - /*for(int i=0;i0) - System.out.println(block[j]+" * "+this.stock.get(i).comb[j]); - } - }*/ - } + private void initialize() { - store=new ArrayList(); - waste=0; - counter=0; this.sort(); this.calculate(store); - /*wast_array=store.toArray(); - if(wast_array.length>0) - { - System.out.println("Consider reusing the following remains"); - for(int i=wast_array.length-1;i>=0;i--) - { - System.out.println((this.counter+i-wast_array.length+1)+" "+wast_array[i]); - } - //out.println("

"); - } - System.out.println("No of pieces req = "+this.counter); - System.out.println("Waste = "+this.waste);*/ + Object[] wast_array = store.toArray(); + System.out.println("Consider reusing the following remains"); + Arrays.stream(wast_array).forEach((p) ->{ System.out.println("-> "+ p); }); + System.out.println("No of pieces req = "+this.counter +"\n" + "Waste = "+this.waste); } private void sort() { @@ -98,6 +73,7 @@ private void sort() } }while(swap); } + private void calculate(List store) { initLimit(); @@ -174,40 +150,32 @@ private void calculate(List store) else if(i==total-1 && qty[i]==0) start=false; break; - }/*//out.println("After start loop"); // DELETE IT - for(int i=0;istore ) { counter++; boolean flag=false; - //out.println("=====================================
Piece no "+counter+"
----------
"); if(a==0) { Map tempMap = new HashMap(); for(int i=0;istore ) for(int i=0;istore ) showComb(a,store); } } + private void combinations() { for(int i=total-1;;) @@ -257,6 +226,7 @@ private void combinations() } } } + private void initLimit() { int div; @@ -270,6 +240,7 @@ private void initLimit() limit[i]=qty[i]; } } + private void updateLimit() { for(int i=0;i map; CuttingStock cuttingStock= new CuttingStock(max_size,blocks,quantities); while(cuttingStock.hasMoreCombinations())