From a29c846ea0836b9ce87f89cb4d61e3ba3eba03c3 Mon Sep 17 00:00:00 2001 From: Richie Colosimo Date: Sun, 5 Sep 2021 12:57:25 -0400 Subject: [PATCH 1/3] Application mostly finished, still working on randomizer --- .DS_Store | Bin 0 -> 6148 bytes .idea/.gitignore | 3 + .idea/compiler.xml | 13 +++ .idea/jarRepositories.xml | 20 ++++ .idea/misc.xml | 14 +++ .idea/runConfigurations.xml | 10 ++ InputFile.txt | 8 ++ OutputFile.txt | 8 ++ pom.xml | 16 +++ src/.DS_Store | Bin 0 -> 6148 bytes src/main/java/CashRegister.java | 173 ++++++++++++++++++++++++++++++ src/main/java/Denomination.java | 12 +++ target/.DS_Store | Bin 0 -> 6148 bytes target/classes/CashRegister.class | Bin 0 -> 5339 bytes target/classes/Denomination.class | Bin 0 -> 405 bytes 15 files changed, 277 insertions(+) create mode 100644 .DS_Store create mode 100644 .idea/.gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/runConfigurations.xml create mode 100644 InputFile.txt create mode 100644 OutputFile.txt create mode 100644 pom.xml create mode 100644 src/.DS_Store create mode 100644 src/main/java/CashRegister.java create mode 100644 src/main/java/Denomination.java create mode 100644 target/.DS_Store create mode 100644 target/classes/CashRegister.class create mode 100644 target/classes/Denomination.class diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..d812c7da95191aed895a31c17fe3f44d87d42039 GIT binary patch literal 6148 zcmeHKJxc>Y5S>k;L~MeU<@I792sR>|;p~Ngb-pwP5--H0ztUa=e}(uTtnC&5g#W<2 z*&UPJTw*DrGqC&i=Hp)WUAVa=B2%AsYeW?yDq}DfwlJ+Qj`PS_K|EY+_#T5^t`GLn9`$JwKEG+|$A)Q=v5 zw@+QVpjODdb00>1?vLBg$LrK`d-cO~!M-{p;HM_@7wLw^)Csxw9~Kdx_x<(g{AFZ$ zrOxNfM?*fl-%XlO3yeMNcuDK(1gt^a=f2!K{^DNBS?qdU&Whi`dskBhRDu7k0D3lC zdE24Rs(>n>3d|MY_d|ri7z<_&?W+TmJpuqra9hKgKPkB;5{v~ihls$8D+RhzBS#G5 z%HfYBFBZ%kx^gmd_%On3&>1yq4Q zrGP0Vjiin(NpH< + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 00000000..712ab9d9 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 00000000..51ec1063 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 00000000..797acea5 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/InputFile.txt b/InputFile.txt new file mode 100644 index 00000000..55a38320 --- /dev/null +++ b/InputFile.txt @@ -0,0 +1,8 @@ +2.15,3.00 +4.00,6.00 +3.00,6.00 +3.00,10.00 +4.25,7.46 +5.69,3 +7.81,8.00 +10.00,50.63 \ No newline at end of file diff --git a/OutputFile.txt b/OutputFile.txt new file mode 100644 index 00000000..140d6837 --- /dev/null +++ b/OutputFile.txt @@ -0,0 +1,8 @@ +3 Quarters, 1 Dime +2 Dollars +Nickel +1 Five Dollar Bill, 2 Dollars +3 Dollars, 2 Dimes +ERROR +1 Dime, 1 Nickel, 4 Pennies +4 Ten Dollar Bills, 2 Quarters, 1 Dime, 3 Pennies diff --git a/pom.xml b/pom.xml new file mode 100644 index 00000000..0c30c570 --- /dev/null +++ b/pom.xml @@ -0,0 +1,16 @@ + + + 4.0.0 + + org.example + CashRegister + 1.0-SNAPSHOT + + + 16 + 16 + + + \ No newline at end of file diff --git a/src/.DS_Store b/src/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..fca07cd0dad535e3156bbce9313b0820ae3186ed GIT binary patch literal 6148 zcmeHKK~BRk5Zr|vB5~;jiKA~^=?_8`UeGHCC`Eu&lS;Jb`Va6Bcmpr$5192XZ7d>= z2*IvokG|vA7#gZ@Rb~*yOjm5V zbWIQRSU&&pOP`Bf+s+o<48D51*}h(O@8=~y|CV3g_q91gDDtl8mY!%;<`rts_4CH( z)3;q-i;dkr?+{<+&3k+23b+EUfGhC76~LV>Rv#&P?+UmAuE0(KIUfR=U}KmR^U;AW zmjJ*D?ra!KEg><%urW-EU|_7FKn-OpF<8Ul54Nr`Oo|##Y{ds#=Fj4Vb9U?>@^a!v z(R)|G6(|)r)agj>{|kIFgGGKB;xkvk75HNcaMe!R30}(X)-SIocWpqsLKBm9Nd_>C li=O~Y denominations = new ArrayList<>(); + + public CashRegister() { + this.tenDollar = tenDollar; + this.fiveDollar = fiveDollar; + this.dollar = dollar; + this.quarter = quarter; + this.nickel = nickel; + this.penny = penny; + this.denominations = denominations; + + this.denominations.add(tenDollar); + this.denominations.add(fiveDollar); + this.denominations.add(dollar); + this.denominations.add(quarter); + this.denominations.add(nickel); + this.denominations.add(penny); + } + + // Main method + public static void main(String[] args) throws IOException { + CashRegister cr = new CashRegister(); + cr.fileReader(); + + } + + // Method for reading from file and writing from file + public void fileReader() throws IOException { + + File file = new File("InputFile.txt"); + Scanner fileScanner = new Scanner(file); + FileWriter output = new FileWriter("OutputFile.txt"); + PrintWriter printWriter = new PrintWriter(output); + + + try { + while (fileScanner.hasNextLine()) { + String line = fileScanner.nextLine(); + double pp = Double.parseDouble(line.split(",")[0]); + double ch = Double.parseDouble(line.split(",")[1]); + double cashBack = pp - ch; + if (ch < pp) { + printWriter.println("ERROR"); + + } else if (ch == pp) { + printWriter.println("ZERO"); + + } else if(cashBack % 3 == 0){ + printWriter.println(getRandomCoin().title); + } else { printWriter.println(this.getCashChange(pp, ch)); + } + } + } catch (Exception e) { + System.out.println("error"); + } + output.close(); + } + + // Helper method for finding random coin + public Denomination getRandomCoin() { + int coin = (int) Math.floor(Math.random() * this.denominations.size()); + return this.denominations.get(coin); + } + + private String getCashChange(double price, double cash) { + + int tenDollars = 0; + int fiveDollars = 0; + int dollar = 0; + int quarters = 0; + int dimes = 0; + int nickels = 0; + int pennies = 0; + + + double cashBack = cash - price; + StringBuilder change = new StringBuilder(); + + while (cashBack > 0.01d) { + if (cashBack >= 10.0d) { + tenDollars++; + cashBack -= 10.0d; + } else if (cashBack >= 5.0d) { + fiveDollars++; + cashBack -= 5.0d; + } else if (cashBack >= 1.0d) { + dollar++; + cashBack -= 1.0d; + } else if (cashBack >= 0.25d) { + quarters++; + cashBack -= 0.25d; + } else if (cashBack >= 0.1d) { + dimes++; + cashBack -= 0.1d; + } else if (cashBack >= 0.05d) { + nickels++; + cashBack -= 0.05d; + } else { + pennies++; + cashBack -= 0.01d; + } + } + if (tenDollars == 1){ + change.append(tenDollars + " Ten Dollar Bill, "); + } else if (tenDollars > 1){ + change.append(tenDollars + " Ten Dollar Bills, "); + } + if(fiveDollars == 1){ + change.append(fiveDollars + " Five Dollar Bill, "); + } else if(fiveDollars > 1){ + change.append(fiveDollars + " Five Dollar Bills, "); + } + if(dollar == 1){ + change.append(dollar + " Dollar, "); + } else if(dollar > 1){ + change.append(dollar + " Dollars, "); + } + if(quarters == 1){ + change.append(quarters + " Quarter, "); + } else if (quarters > 1){ + change.append(quarters + " Quarters, "); + } + if(dimes == 1){ + change.append(dimes + " Dime, "); + } else if (dimes > 1){ + change.append(dimes + " Dimes, "); + } + if(nickels == 1){ + change.append(nickels + " Nickel, "); + } else if (nickels > 1){ + change.append(nickels + " Nickels"); + } + if(pennies == 1){ + change.append(pennies + " Penny, "); + } else if (pennies > 1){ + change.append(pennies + " Pennies, "); + } + + change.delete(change.length() - 2, change.length()); + + return change.toString(); + } + + public int randomCashBack(){ + return 0; + } + + + + + + +} + + + + + + diff --git a/src/main/java/Denomination.java b/src/main/java/Denomination.java new file mode 100644 index 00000000..a21ea003 --- /dev/null +++ b/src/main/java/Denomination.java @@ -0,0 +1,12 @@ +public class Denomination { + + String title; + double value; + // Denomination Constructor + public Denomination(String title, double value){ + this.title = title; + this.value = value; + } + + +} diff --git a/target/.DS_Store b/target/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..ee5ef6f146a48670c1a42119bb083a6fd0a17065 GIT binary patch literal 6148 zcmeHKK~BR!4D^;t1aT=B#Bo1>M1K&fa7XF~pb2UZNfQxz&tLimUci+vaOVr$7_Utr zq)6cc2-%fA8?T-9PNKL=L~gdprbH7WilB_61DGAc^Q=7?sfQelybVJ8o&1W6_u2G%=jsyD3fH7mkZ29m;QPCSUsHYipmB=RV#j5-c~!~ zMUQBSI@ZuzRCNc;=oGb;w1Fq>*T_jjvOd=RvVFQ=m!a+f>lNkuUcQ&v-CwBGj4@yg z7z4k}0D3k{bSP-n7%&EmftCUOK6of&tk?*KPX|mm0szNw2f>)n5}e}|W5q@gGY}`K zKuL9a#Bh=hzt^}}u@RJXa(ei1y0X&~iVLgb{yv10iv`UZ1I9p?fjzmLaR0yf`uyKb zvMXc282DEVxN$O1X4sPU*52m0*Lvs`l!fCO!8Qeh(25but@s2Q1b)v0V64~(!UM5C N0)YlI#=ws<@Cr~yVMhP} literal 0 HcmV?d00001 diff --git a/target/classes/CashRegister.class b/target/classes/CashRegister.class new file mode 100644 index 0000000000000000000000000000000000000000..e1231db67be345b127b870aba72b47ea9b927795 GIT binary patch literal 5339 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 literal 0 HcmV?d00001 diff --git a/target/classes/Denomination.class b/target/classes/Denomination.class new file mode 100644 index 0000000000000000000000000000000000000000..e21a11720bd862e3af161a2d904f47ead5253730 GIT binary patch literal 405 zcmZWlO-sW-5Pg%Rjg7G%QLEncmPW8Ypv8;9Q_w>t;BgZ}-I8t~Zu-AG6v2Z(z#k>f zM!|xIeLEj-X5P%_*ZT*6InF#-uw6JlI_MIHE3pyNQmEzhK3f&JCUoagNqtSQ!%5o1 z9(pc3AN%kLeq5+(EtSx+QiP6{x-1Am^4DgeYpIqqQ`q-0z>sMhQ8rAYm@p3ibK^-$ zaBiw6<_r?4io0f=74?J2ewtUgC{s~O8K8Dz12!k&fGZ*cQVqyPW_ literal 0 HcmV?d00001 From fd2835278bbe3aeb265708767fecff62cff6f647 Mon Sep 17 00:00:00 2001 From: Richie Colosimo Date: Sun, 5 Sep 2021 14:46:48 -0400 Subject: [PATCH 2/3] Finished Cash Register --- .DS_Store | Bin 6148 -> 6148 bytes .gitignore | 3 + .idea/vcs.xml | 6 ++ OutputFile.txt | 2 +- src/main/java/CashRegister.java | 92 +++++++++++++++++++++++++++--- src/main/java/Denomination.java | 7 +++ target/classes/CashRegister.class | Bin 5339 -> 6193 bytes target/classes/Denomination.class | Bin 405 -> 578 bytes 8 files changed, 101 insertions(+), 9 deletions(-) create mode 100644 .gitignore create mode 100644 .idea/vcs.xml diff --git a/.DS_Store b/.DS_Store index d812c7da95191aed895a31c17fe3f44d87d42039..cf2fc7a8fea33e570dd5174ad9676b9f16339f0f 100644 GIT binary patch delta 146 zcmZoMXffEJ##H~fmw|zSg+Y%YogtHMCBrDMDOokMOREETybR<~@5q6;L delta 146 zcmZoMXffEJ##CRL&%nUI!l1{H&XCDalAG`1l9ZF51Qg>i+i=r(a?xQ&RQVLV@&y@& v!O8i#1wcIv42%IFk`-unCPNBCDnnvUI+84d&{Ux8 + + + + + \ No newline at end of file diff --git a/OutputFile.txt b/OutputFile.txt index 140d6837..16df2967 100644 --- a/OutputFile.txt +++ b/OutputFile.txt @@ -1,6 +1,6 @@ 3 Quarters, 1 Dime 2 Dollars -Nickel +2 One Dollar Bills, 17 Nickels, 6 Pennies, 8 Pennies, 1 Penny 1 Five Dollar Bill, 2 Dollars 3 Dollars, 2 Dimes ERROR diff --git a/src/main/java/CashRegister.java b/src/main/java/CashRegister.java index bbc58f0b..8f7c044c 100644 --- a/src/main/java/CashRegister.java +++ b/src/main/java/CashRegister.java @@ -7,7 +7,7 @@ public class CashRegister { Denomination tenDollar = new Denomination("Ten Dollar Bill", 10.00); Denomination fiveDollar = new Denomination("Five Dollar Bill", 5.00); - Denomination dollar = new Denomination("Dollar", 1.00); + Denomination dollar = new Denomination("One Dollar Bill", 1.00); Denomination quarter = new Denomination("Quarter", 0.25); Denomination nickel = new Denomination("Nickel", 0.05); Denomination penny = new Denomination("Penny", 0.01); @@ -36,9 +36,10 @@ public static void main(String[] args) throws IOException { CashRegister cr = new CashRegister(); cr.fileReader(); + } - // Method for reading from file and writing from file + // Method for reading from file and writing to file public void fileReader() throws IOException { File file = new File("InputFile.txt"); @@ -60,7 +61,7 @@ public void fileReader() throws IOException { printWriter.println("ZERO"); } else if(cashBack % 3 == 0){ - printWriter.println(getRandomCoin().title); + printWriter.println(this.randomCashBack(pp, ch)); } else { printWriter.println(this.getCashChange(pp, ch)); } } @@ -154,16 +155,91 @@ private String getCashChange(double price, double cash) { return change.toString(); } + //Method for finding random cash back + public String randomCashBack(double price, double cash){ + // Some variables are for if you want to combine multiple returns of the same denomination + /* double tenDollars = 0; + double fiveDollars = 0; + double dollars = 0; + double quarters = 0; + double dimes = 0; + double nickels = 0; + double pennies = 0; */ + Denomination random; + double maxRandoms; + double chooseRandoms; + + double cashBack = cash - price; + // double totalChange = cashBack; + StringBuilder change = new StringBuilder(); + + while (cashBack > 0) { + random = this.getRandomCoin(); + //Gives us maximum number of randoms + maxRandoms = Math.floor(cashBack / random.getValue()); + chooseRandoms = Math.floor(Math.random() * (maxRandoms + 1)); + + + if(chooseRandoms > 0){ + cashBack -= chooseRandoms * random.getValue(); + // Round to 2 decimal places + cashBack = Math.round(cashBack * 100.0) / 100.0; + + // Could use if you wanted to keep track of totals. + /* switch (random.getTitle()) { + case "Ten Dollar Bill": + tenDollars += chooseRandoms; + break; + case "Five Dollar Bill": + fiveDollars += chooseRandoms; + break; + case "One Dollar Bill": + dollars += chooseRandoms; + break; + case "Quarter": + quarters += chooseRandoms; + break; + case "Dime": + dimes += chooseRandoms; + break; + case "Nickel": + nickels += chooseRandoms; + break; + case "Penny": + pennies += chooseRandoms; + break; + default: + System.out.println("Something went wrong with the random switch"); + break; + } */ + + //this is a different way to format there not being a comma on the end of the string builder + if (change.length() == 0) { + change.append((int)chooseRandoms + " " + this.singleOrPlural(random.getTitle(), chooseRandoms)); + } else { + change.append(", " + (int)chooseRandoms + " " + this.singleOrPlural(random.getTitle(), chooseRandoms)); + } + } - public int randomCashBack(){ - return 0; + } + return change.toString(); } + // Helper to decide whether denomination should be printed plural or singular + public String singleOrPlural(String title, double amount) { + if (amount == 1) { + return title; + } else { + // We hardcoded because we only have one case + if (title.equals("Penny")) { + return "Pennies"; + } else { + return title + "s"; + } + } - - - + } } diff --git a/src/main/java/Denomination.java b/src/main/java/Denomination.java index a21ea003..29ef0244 100644 --- a/src/main/java/Denomination.java +++ b/src/main/java/Denomination.java @@ -8,5 +8,12 @@ public Denomination(String title, double value){ this.value = value; } + public String getTitle(){ + return this.title; + } + + public double getValue(){ + return this.value; + } } diff --git a/target/classes/CashRegister.class b/target/classes/CashRegister.class index e1231db67be345b127b870aba72b47ea9b927795..410950b241211b58685f3d527f664541bd94e01a 100644 GIT binary patch delta 3093 zcmZuz33yaj75-0Vd2imlOp*x+lSE1|EC~q&Wor_UC4m-135$)?e%3J=lE5S*Gl8;5 zrwfHj3oU&V1Zt^Lhf# zIp;s;y=N*8kFg%R(DMTTljPG|toL$r=61$P8xrw&G+8>mJsv-5NS$X!C>iZ+Np#dl zQ*G0u%}WJ^e~p28Mw_k z>5T+8;C2IFv#}9(I4^j|&fFyM#gfTH(!yQ1!NA>ud~LQpQQb(JU9=pFc34=5du%xH z6W<(9q+%BC#Wn-mZG0U&oa=l;C+xCuAHE^*rrKA>1fKGWSqik<#sl~!w=Iq*5=kzX zH&iqPF$H^UJczwc##id?77TPo2L?tg?1RTY<-`v4+ZkqD4%qk(4mttVJQ(*!d4<12h=e?vhibeU4J~*+1k~nRHtnG z6sMhM{gs3E;paAf0s3KfCHkVPg8NGwkKaVXnc9hKXnoB z%%Af72^&x1DSDnvEbnaT^L)12_9q*E)~2~_VS87c!OX)mHlD?Ef>4T?jK}6C8{^B9 z(YRoQGtZx2_W#lyMhItAeEv#Q`7CF?f9Tk{FmiClLOWit@i)}d!Pv6p(Rj+lO9G=Y z*4fz}ONEh(SJci|1;c57nAADN#%cMdbJiG~AO0w_j$SZkOO@3TT{&Ma)swbJLqqh(-fGHBUe~5SV|2U!o%d_&V7MXGSrD$k@3R?1Eh3etn+fVr>aU# zDc37A+gE(35Y);@=b%-bt`b<{?o!&(f?)q#8yKS%^Oi@GU9qG>d{SUbsjJYCam*R_ zw0FeR`UF9sZ>ATo)CYXFy?JRYu9j={a^E~@5f?l}n>$;I$>pOz=;X5VGI%DI2%uyo`C6?h(=tACe+}1)ROR%und#2 zhOK2ireYhWVGrtQbSBL<;33SwQF?U@SL+xors;7=;9rcLkJh62H~vFU8?gZY<;bMv zIk>=)#l0qa8D^h~f{Jt%2Nn*BNEUCNkG?PdJ7-JFRu5vQuIJS;_7_}#`Q?Oy_aooRolA4#Cz_+q+62>8dvUG$j zy5kJ_Fc$Z7m$cO0Q;Sy zyou?DfDFFd)Q!RdpZ7uJ7KI9YJq(-H7WlmnFt?!se-9qM1oXQ=YQN_K4HsziaN|Xb zh6|+jmkzPhA*OuWF3z$k+@Nk^UI`IGv=a&e2*cT#$paz(SbIsAfs1d z2@7H=HX)9?sojN6zB3c(##e9zNya-xPOQLb+<>RBk}r@|c$F3K7QTvJtQ8+_lrTRA zBDh(~af^(`tx|{EWE$4XJZz9A+%7HHC`)jMtj3*^z6qOT6Ydg+9|C*G;QhEqGT17Q z;$C?i+vNAyE@w#1^L*8-MzUHp26^A*97kfaU_|L8nGWd0Zm006vaYp<(&8jSG%!o-??~@TLVrs}z8c{v)cU=C%Mm`fY zR*_BO?8M+AJ7R7gsbGIpZSm7Ebz-3IEpf7xY(LBh;eu&IE zj1tyoISX<;t7;O}evd|gmC0k9cG+=l<{mPP$ zBAFI``#{pV7pB+?y|hwNp2L@kukui3cuWS*?|?u2;-ShOybOBYUwehRDZfNNUZw}H z@k8ny2CzRWc9xQVG;`6V5*ES-ik&EtB6^&qug}J72FcT6<$sox$j1n1L!JzRNST(y zv>c&jg_f0Cj?%JP%TH)IR?G2PPSmnS%Q`J5YdJ;BX@)LP}CVS^?QX56JFDtB87JRgQXGB7_o1lVeg)iWo!|Sp`3e zfC>s&rQop^14P^v_YDRD>{if4D?X17{ckXEb zgXFZO`caR&IvI~gQq3hY&|w~RR|dWCV5WiFFiYU7i`B)W0>2q?mbIQ^U@mSK6xKxR zsv_wLRTCnK8d}RbRacvpTEOAKd~=C2a8{62?JSdF@x^2u59w700f5urvjG(w*rp>O@UW| zuE3|jP*8{_wapF#FRO6f@o1u^Zh}(1YTz}zZfY_SSaD z=jI<;+vc9$3#GUy6-kUs)~a+5j*OjTuGRY#Y5YZWWq%&E3AR_{`(J@=T#X7n`AM#RA{IbBkPRDMn0=r0Sw6#Rv!t zsjw9mCCHe$CRQ6&_Lc%~er6fN)&`fx#!iaHmARE=&d<}@8Pdj@5054iQ5ZPDj%oIn~^4bdmO^udp`oHmg;DcUS@z+roF77ZmzLcACqJu5I-m z%?3@talDTYIC`-QA9BgNW@+&$!*)_r#Bu`dS-TG8c7$3}Mg~~4kMJ=^jjli8YQd+R zIXQmD{~_FtegHX0$)IJ6c}sD3sW&$k56BD(X(9LWl_(55{Zq4;(ts`@y#=PFi>UO6 zon5k+z8SY#mJ&`w?vR$nY&AbIy8(p*T#sXce`ywG_bl#i;(i_3(hp-Eqg7E~$ryod z?6d9&pa6+$i~Y=28{WSO1lpN ztos2Rr27K(isiR4_m-aKYP@0#Hkn2Kn!-nyuR`f8uY`;ic+{Nf@0+3bEH;m6Kv~e` zT!)fyQP7pc*1R_8cCJByDt8XsP7>WVk=mS1^w>mC4o{vWdTb)K+ijv|6SW+kqAFwW zt=UYf`E;v@f?k{H&Ec7oF1II@Rfw>5*JBvQk}(dE45A#yqZT!of(e+)uAYU7ScFMzr#M#8vW`95 zfFyhQ20Vcj&pjDC$liq;d2MfE`_;4T({KVeiwo1mkBo#cLptGB>4BLtkRQ79Fk41o zj*P)v8Haf?5%Z-U3nViG3uO@&i-|jAEtbe5SSq}tvK`Ch4SvUV;%@m8E94MEQSV5- zdKcuF-E&I%nHNSZ-62X2IOGTpGax=*T=fejH{Z?!sHEiKEBgbEP|{E=`|;~gieC6- zAC6Me5tKbRM#+bA`P{mT2HMH{_zl0ay?%Pnke;VDu<=Qk$JKTV@|yU10#bF&?J2z%?PAfwYD&@ZvZlw7=(c& t8(5HsK?KO=fhb@QWe@}M7#SoPq<|zuGZRD(sF`;?nq~p4nx(<2WB_Cg9d!Tz delta 34 qcmX@aGL@O@)W2Q(7#J9A7$hfh-JdMOXvN4lIh-+vm4ShYK>`57c?jA7 From 5cf106c86232693b7bae425b4dc5d71b57807c45 Mon Sep 17 00:00:00 2001 From: Richie Colosimo Date: Thu, 16 Sep 2021 13:26:08 -0400 Subject: [PATCH 3/3] king sure random selection returned dimes, that random output removed duplicates, and added order to output --- OutputFile.txt | 2 +- src/main/java/CashRegister.java | 91 ++++++++++++++++++++++++------ target/classes/CashRegister.class | Bin 6193 -> 7944 bytes 3 files changed, 75 insertions(+), 18 deletions(-) diff --git a/OutputFile.txt b/OutputFile.txt index 16df2967..86871ff2 100644 --- a/OutputFile.txt +++ b/OutputFile.txt @@ -1,6 +1,6 @@ 3 Quarters, 1 Dime 2 Dollars -2 One Dollar Bills, 17 Nickels, 6 Pennies, 8 Pennies, 1 Penny +8 Nickels, 260 Pennies 1 Five Dollar Bill, 2 Dollars 3 Dollars, 2 Dimes ERROR diff --git a/src/main/java/CashRegister.java b/src/main/java/CashRegister.java index 8f7c044c..e1299497 100644 --- a/src/main/java/CashRegister.java +++ b/src/main/java/CashRegister.java @@ -4,11 +4,14 @@ import java.nio.charset.StandardCharsets; import java.util.*; + public class CashRegister { Denomination tenDollar = new Denomination("Ten Dollar Bill", 10.00); Denomination fiveDollar = new Denomination("Five Dollar Bill", 5.00); Denomination dollar = new Denomination("One Dollar Bill", 1.00); Denomination quarter = new Denomination("Quarter", 0.25); + // Oh wow, dimes! + Denomination dime = new Denomination("Dime", 0.10); Denomination nickel = new Denomination("Nickel", 0.05); Denomination penny = new Denomination("Penny", 0.01); @@ -19,6 +22,7 @@ public CashRegister() { this.fiveDollar = fiveDollar; this.dollar = dollar; this.quarter = quarter; + this.dime = dime; this.nickel = nickel; this.penny = penny; this.denominations = denominations; @@ -27,6 +31,7 @@ public CashRegister() { this.denominations.add(fiveDollar); this.denominations.add(dollar); this.denominations.add(quarter); + this.denominations.add(dime); this.denominations.add(nickel); this.denominations.add(penny); } @@ -156,26 +161,37 @@ private String getCashChange(double price, double cash) { return change.toString(); } //Method for finding random cash back + //Now with dimes! public String randomCashBack(double price, double cash){ - // Some variables are for if you want to combine multiple returns of the same denomination - /* double tenDollars = 0; + + //doubles to track counts of coins selected + double tenDollars = 0; double fiveDollars = 0; double dollars = 0; double quarters = 0; double dimes = 0; double nickels = 0; - double pennies = 0; */ + double pennies = 0; + // variables to store data about random selection Denomination random; double maxRandoms; double chooseRandoms; + // Arraylist to initially store selected coins as strings. + // Can contain duplicates and has no order + List stringList = new ArrayList(); + + // Calculate cashBack required double cashBack = cash - price; - // double totalChange = cashBack; + //initialize stringbuilder to hold output StringBuilder change = new StringBuilder(); + // Main engine + // Selects denomination randomly then selects amount of chosen denomination randomly + // While loop runs until no more change is required while (cashBack > 0) { random = this.getRandomCoin(); - //Gives us maximum number of randoms + // Gives us maximum number of randoms maxRandoms = Math.floor(cashBack / random.getValue()); chooseRandoms = Math.floor(Math.random() * (maxRandoms + 1)); @@ -184,9 +200,8 @@ public String randomCashBack(double price, double cash){ cashBack -= chooseRandoms * random.getValue(); // Round to 2 decimal places cashBack = Math.round(cashBack * 100.0) / 100.0; - - // Could use if you wanted to keep track of totals. - /* switch (random.getTitle()) { + // Switch to make sure the amount of coins returned is tracked + switch (random.getTitle()) { case "Ten Dollar Bill": tenDollars += chooseRandoms; break; @@ -211,17 +226,57 @@ public String randomCashBack(double price, double cash){ default: System.out.println("Something went wrong with the random switch"); break; - } */ - - //this is a different way to format there not being a comma on the end of the string builder - if (change.length() == 0) { - change.append((int)chooseRandoms + " " + this.singleOrPlural(random.getTitle(), chooseRandoms)); - } else { - change.append(", " + (int)chooseRandoms + " " + this.singleOrPlural(random.getTitle(), chooseRandoms)); } + // Each time a denomination is selected, a string of that denomination is added + // to the unordered ArrayList (with duplicates) + stringList.add(random.getTitle()); } + } + + // Duplicates are removed and a high-to-low order is established + // by creating a new ArrayList and iterating through this.denominations + // Strings are added if they are contained in the original list 'stringList' + List finalList = new ArrayList<>(); + for(int i = 0; i < this.denominations.size(); i++){ + String coin = this.denominations.get(i).getTitle(); + if(stringList.contains(coin)) { + finalList.add(coin); + } + } + // Switch used for the StringBuilder + // Takes two helper methods singleOrPlural and builderHelper that format output + // and reduce repetition, respectively. + for(int i = 0; i < finalList.size(); i++) { + switch (finalList.get(i)) { + case "Ten Dollar Bill": + change.append(builderHelper(finalList.get(i), tenDollars)); + break; + case "Five Dollar Bill": + change.append(builderHelper(finalList.get(i), fiveDollars)); + break; + case "One Dollar Bill": + change.append(builderHelper(finalList.get(i), dollars)); + break; + case "Quarter": + change.append(builderHelper(finalList.get(i), quarters)); + break; + case "Dime": + change.append(builderHelper(finalList.get(i), dimes)); + break; + case "Nickel": + change.append(builderHelper(finalList.get(i), nickels)); + break; + case "Penny": + change.append(builderHelper(finalList.get(i), pennies)); + break; + default: + System.out.println("Something went wrong with the string builder switch"); + break; + } } + // Takes off last comma and space from the StringBuilder + change.setLength(change.length() - 2); return change.toString(); } @@ -237,8 +292,10 @@ public String singleOrPlural(String title, double amount) { return title + "s"; } } - - + } + // Reduces repetition in the String Builder switch + public String builderHelper(String coinString, double coin){ + return (int)coin + " " + this.singleOrPlural(coinString, coin) + ", "; } } diff --git a/target/classes/CashRegister.class b/target/classes/CashRegister.class index 410950b241211b58685f3d527f664541bd94e01a..2541f7802abba468d26516033f8efd8c3533be97 100644 GIT binary patch literal 7944 zcma)B34B|{ng5TUrS~K~%eH((N_;56BtCLL2nO4MT+U%|Vq&KWPPi2L#a1FqMv@`n zDy4z8T%{BU;a&=LfpRwvaoR4lEZgO5yU?ZOXesSNPYO$yEfn1U%zKh8JHP%`{=J#` zX1@7m=DTP7>}O-&2e4FFUKBvnQE0*iw?N6x$a#@P@kpY7QP=jJRx~5vUK&fpGA9dY z^$nYK7y@Ryl}HZ85|KfJ#sn~Z@P?zbzEH%a1#P0W_K?ml%614jwy8;2t)?!&$8#}h>7 znW&eD`nmR?fkuJC_Sm51UUq1|{M{nyEi|!6q80XW#K5tnydf6dWyRgg?wi0m-bAxn zHKE1~oG9Qr%}ONpxR>p{;H|X}m0u`{Ej4kHL~{+vAsx#E$`mt)GqL!h6{%EYPbWF% z#mUel{z?<8&@NEaH%U}!vdb2Mnk6T+`LG6Sb*wYdfm6uh38HeCLXY(I2~% zb5oXZv_tCK7J<@#H}24_U0_pCMTUC5SYC7mQ;*VG;kJA*fpHV z+rl<%(hlT=QlW@hXeUYvudT!%a;n^?yl_S|?NaTjf>l>yUf`Np9nD509&ef4Jkp{Ux$sBE#Py^CK@fe5ZO%_R(U)!b= z_ToI8uVc4~J-8r`VtaCUdz@SK4MkFET89ngi8@QS-M~d$dUbbqSGVNJB_=*Eg{BWl zUd8DIzCcCay1Ki|z1*-ZMe4=nCa%Dj$n#Vr(U%;Qmc23(-6dT?d;1ZXAm@C=#FcVR zQNNXu6IKn-8Cg26&Pqr*r`5Zo){t~R9$bsB>bTCt*KmE_@p|^qgA7s<$zigq!sbj? zygZl{8Keujfyc5^sU%hECS0OpUv`;%OfR-!zlmFA`V7&S*wzXXe6^G zmKk6xorxqebPH3cJ7Sjv4wx9lK^`YEMAt(zSa2l0o2GWo7TN+3cr?Hm!$Olqp)6do zaLYoMg&_-%EWEPt$-hdQM{*)ZGE4*S2^{y&cal~SJ?yOD>_{^H zeG?zxe;CTsR;E))P%@{ZVY7k1(uK%i7qij<`0n1r3qLJEijy z^>bd?5rzc{qLiXH=MB@kD4OKJI=XTrq!U+xDKMQEBr`O`=+iFg(RCTooTC;zpW{07 z{jS`&jP~+ClOrwreX`#P)ZEM@K02MmanmU?3Ja9y&2|E-j7bwgIJbkWOU_{x^<)@M z)<=f2ERHJU6&k zAQA{oV_??Vahbu$ZrhD;Mp1Mi$v}~VMU3?9;oblh%N<}1&hp{xSc zP2!|PT{>+eZBi>;8R=uV;m9Bz5n1e&T(NbWKu>Zw6}4mr#?)!DDlU{_q~}|iOlG*Z z$k2Maon&9S*ezPUqD?H-#Ywa%!J9zcM8t_D&P(pH7TM(O*s>-P%_LKM1a6*e#tx!Q zbRAu7+)CGVCX>5{huWqeWKvJw#7$(!5zr^wMm9a2PGVIg9`9iy*k*|3R7??`a%-6% zHpEJ*T=I%Z!MRtTM{!?|Wij15eiMcC<3 zC`_ac&Y^0`@ou^)8&ZRt)B^U!LJremaM*^^hB#e;(#7tPqfD2%yyJ0Y2NUH2K|ChL zE)f>XX4tFZk#yRkKcPw-Jx$z4lAQUIV#6ntqea1Ogir20 zh~)>cqOtKiD3J@Yo_PQ>WnFs!wX&Xj0CQ!%-~blLddUGSk#*Yvw8?sfoX?71$sw#R zz!nFZnFrP8L38t<1$oetJgCiv9#!0vlGuR|%W`ID9+qCzF%etLJZvQcb2r23c9bB6 z04^r?FGnS=!3^ApAa3Wpdoh!Neijb!y8S)W;5pRd=Lq8+%K5LDBQ##7OHn6kaWvZ? zRV5oyC|ra*!Yy>lkbS&`7AU@zl#9!DlIr79|boB-{9z;*)VQlWDY)@Z*7~6USXCB1a8xG@~ z-USD-y|r-uD6IXskX5YJ6>Us><1in6s8yAe? z=0|y&dH5#o!&T6P6x>z{0~D1P$Ds^MP>th>(Sn6&CDcX%F2!klKG?#?fwQp;F|5G3 z?7fiYa|KrO-m```lXawdDyeqx)^Q3RM<)(qz2ff5*CaOd=3Pla) zbi){DmrF;fjxHU%%WuK9tTJr%0#IDOjoFDo>ssFxj^q1bV3( zl6$kCz^&4-4&h$}zO?HJ+u)g+<3Vcr!>#_HNguNB z4(yW+-@aQ>y4NLCn^+^`Z_8#-b-Pt}P<1~aG>h3;yjN#uvFbV`G3ykjp)l)I_uaC) zNp*Wvca!SAN_H<+-CotbSaoOi`V`cnpdA&i!n>%h{tDL^$dXZfXUhmG*?SL4?A|Br z-U_#a=pMtN2}HMp$lfsrQFjpaF&v&i)Ez|je%C=X97JP`-X*uR;UKb?kC}2q6&?rC zGlqYiK=e3>?0wQf^g4*%F+4Sa=yed;`vV8j=OFsV@WTm2pM%KWr|sU5Kja_9zq$HU zHHsf?k&Wl2^4M1T0j&_U6b+}-c6#Y#w^C`hQ8~__Q$3ST^&C3U2#!J&^U+5ews0by z@+!VAbz*=oWiig!NsL__jbo61=OMvYoh0`1LU|2s`Z_x3TlsQy4>EjI80Pioe7fY_ zJoSZm1{dLHbl$Jy5?&B5#e4Vyjp{Ob$}frlE*C*uA?o??vJhVuZMagbz*S-+UtPA~ z8qtTZik-MlTtHjBl+P^J@Y&?+xKVrqH;McBWHO5V;=8y-JWs3sDQ*+L#GT@O+7oRP z7f5d_K5~piwr0~)2-P=-Esgy7P#h(~GI)#kMIBpihJ-(3Hd{KAp+AVD*)sTq{H~bG zmIndxTQQF+KFDOKd08}wMw+AaC<{?JPNtgl9h%16K>qmP{UA_V z8K|tREUE}h{^QR0WMvz#`-|L3m;(Hhzs2Qm(futRe~ZuGQsi$b_P3NeVZJpetvHmm z;#t9vf8QPA`o>Yb)LIq{g~~?ppGmrvmU4QUV0m#=`k0o=U?tJUUkQeSl?r7SX#_*% z_!);^y^?jZMa_M^wW^@GI#e}^Up~O&NZW&cscT0m>+M&Xtyi;7T~)GbC+q7UufBa9 z>y-#!`YG$n3UB)3Ue+Vohz%zDU|R=!qp01>yq#a z!gCaSf?LAJ5^hlNJYB-G2_K{28HR*Q37?=~y@V4gs_*Bb{H5%Q+yr$SeDMaB^E-v# zCVpq}8wk3BmC+X02-XI5+0td`^vITH1jhw^vgI2=L$FA;ibhZyES9a}5mW?AWvg@q zJ{c;1%TP&PlJT$GNzTY;gIQr!@!%EJIfs8Y7Rz=;b=KQ+PHPP(*Brt-1=!E1T_xKx z{n}eCM#i5}^FviCT-+_54prsm4z<=4G}ne|vXTPrZ$egmj;u0{tZr~*)$Yh@uOq8_ z99eA&)lA5$R?4boLRN$~63)qr@Cw2?SrI;#a86c)XA{oJif}3630c)v)H<^I9rrAM zSy`=Rdpp02`Q6O#aegm`W;ISec+fS9-`f%4!Kp)fZs_`{LsUg)*7;M1e7T`BrVbV5 zhE_}+D$WhfojO#S8&WFrXR3&l=V#5KS)p0VagX9JvZY*hp^Epm%l;N!)O}>f{d7DJ z(3yRkF8e{c?1$*GN15v$qIWq=wSJQ6*HcWpe#ms{Y4q^Paw~pB=lv|5@bh$`FN$4w zNhI(SG0Ydo-FR7i9A`ve~rxbS{~4<8rI#3xz_KGo{+nbyPy<5l!0f}E zNAVmo`3zyc_LOq`v&3@+bHp(mtrExbJo18|@Wo;T?J>5hRCu@x4dWCZ{{hMH;QTm+ zc8fK3m>6eB%^TLCYaCL;OhFmSiq)@Zfye&+4f;4Yn>Q(+=BMzHfN1_0uD>(6{1lcX zlqECM{*esF8IbtEX$K^R_Co#vv+9d^d2ls7(&X5%JMiHnO=I|9J3iPMN2ScdnOVDe zP($#-E#~kAqfUu9Or<87teDt3j^gA|*jhqn7AWR0LpFTu<=e5dflktt8}Qd(+t^e; ziocEF@AjH@ifmuH8z-&d&#mDX$2)7tL|I<{H6bHGfjB{&$eI^S(ZY3>sd9xXSE+Kf uD%YyALzSnha=j|MRJl==J*xbiDz~VzSC!jTd8Rm<>v*}wIbu6aGV~AOwj#6u literal 6193 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