From 87dcb74f6bd315e63384eb8eba1c94dbc238f1d9 Mon Sep 17 00:00:00 2001 From: Kalle Vuorinen Date: Tue, 2 Oct 2018 21:46:05 +0300 Subject: [PATCH 1/3] Assignment finished --- bin/.gitignore | 3 + bin/StringCalculator.class | Bin 405 -> 1742 bytes bin/StringCalculatorTest.class | Bin 505 -> 2718 bytes src/StringCalculator.java | 57 +++++++++++++-- tests/StringCalculatorTest.java | 118 +++++++++++++++++++++++++++++++- 5 files changed, 172 insertions(+), 6 deletions(-) create mode 100644 bin/.gitignore diff --git a/bin/.gitignore b/bin/.gitignore new file mode 100644 index 0000000..249513b --- /dev/null +++ b/bin/.gitignore @@ -0,0 +1,3 @@ +/StringCalculator.class +/StringCalculatorException.class +/StringCalculatorTest.class diff --git a/bin/StringCalculator.class b/bin/StringCalculator.class index a937b0c43633d36f133837cd90ddd10fb14ac782..477596b5e340dafc666fce4d1edb5c058ca05955 100644 GIT binary patch literal 1742 zcmZ`)OIsUN7=BM~lcZB2iD{b_X$!^X2C*%oB@j)KR%i$+h!5(*A&hbAWG2sK!XtZk z{t6d9-MG*V^zv9;x$vj>BgFU23<)4EX6Bsl@_z4kIcNU*=fx`kv-ng&NMLlsbquS$ zq?xV0skyeJAVTRAZBMJ1n$@nX?>y04u0U+Tune~*5Y8921R_iJuAW2~2^CSq1V$Q$ zr8oPX9o^Z~c1&F$-LPAlxurRV+y}yl`;F0)y0dYsMAmk91+w|ZFuHG5EvyJ6m%nT2 zUDvR!o`SSM?kvJUAIIwgNJ8L}ip#hnaJ6Myd%ELp+CD?yweC3DzQFDC0)Fvd5)$yL zifb4ne@E}wd-`&x>+bttOe&v0$E$FTEQxX4P;gx!HB5EIa`m?EsJMv{fp}MQdOBrE zq>xZ>OJL%Jt!e6Q&8$1^en+?5LFTNI<+Y$kQnJcJ7oVl9@}6c22v$@LY=b&v&S5$* z^4;mj#@;#syYfFw80g}LtF^ve)4E>k6})w7u6#fR#W?N>C|~x9Wj;w%@V1IM*|cb{ zYZ{z9C7>zrnkGB8{!i%Lp@u-x}{DgY3bbxHL zIDLRzb9#GTc{LXc&qbdin^UsUyYrE;T;v(v_-gU{sK`dMu^*5AehRhu5~=M&O#D9f zGtpJlP{$;xOI9-;pUaGOg_>(fV~neDlyRLm=s0a}(s}|9=&_17J?k2CA+LbFTuo6U zh_Q;>$n%?~e*s0tC^Lr=wGkr3xtpeJhTdgFj_4LwAQV*i+=1}kNF5=8a3Gi3$vClj z$?+}A`JqDRYmgjns(6Yxx mA8ZhO%BzU1e-2HoGx#K*kGv{hiykA>rAUTgk(w&ik9jL&Jfsug; sNHa070g((`K#~n8#sHM%29jbBSq2^kULX&oLV!UKD9^|s1m+0?0Fk>5Q~&?~ diff --git a/bin/StringCalculatorTest.class b/bin/StringCalculatorTest.class index d44b83f48579a95c814a0008fdfcca590443d2de..ffe7f1b9d4729908059b92946585bc2fd52d2f4c 100644 GIT binary patch literal 2718 zcmbW3?N%FA7=`zNgiJzcArQWyP+JL*77{+xhN6J9g$Ae%rN-Lg5Jngb6P!%whs$5u zd+-+g=^xvrOE18Sa=FjU)SZ&OZIqo50s`$v`l&uu)UAW5t-T|o;0UxVn3m}*3N$CicLV|}rF|oUW`v^% zqDA0h*0hYx%JH6IZ|i$SLm-wd74+hcZkzJm9}GB$W?7&++bDNN;DSSjU44Il_f#*M z`vQ^GX9eTLF-ulCgbsne^B<~t&fTwAj(KeCm}QeGmn^H~=21gF@QlzKt6$ZB6}v27bi2m7No%PXDWgb zTn=HBNzO7amCJ_hMDZT32t;-FZS~uVUZf_$#QM6FHbT|>hDZ_56H=sz6v-QxE9xi& z+HAwA*p{)sqZcdeg;?W4CGAtwIoy3=*d-0u1j5tRI;-qK22hK=b!k@3b+rvLj!&HD z0-Evcgbp#N$Uq&eYEDMO2gG22v&dGZSfmx)Otx`cIyF{hNUyLESZIw8y-^J}1)9<+ z4IeWaZ%YEuu)@LAoNUo*6t{4j#nuI+!imJAda=eEjLF`uMX`>%0v%qLmTX&pUTxL* z8-ctnlBtd356O0hWqt0~0-d#Myoy+*YL>sMt*U7CD_5aH$vUNXwoC4)hWqqED#@zp z(BzD)eLIQ=V8(v6)Z33oN!XqO{?06N9=qmIXfNU<`5Wa zwCEvi=5|!W6B>t{X%|)k(+H7VsbUw5Tc$iL>bCVZRl6>ojZx5h?w*S9iH8lZA-ThN zXZI1Dcm?ejJ~Sc1tDNQ_T6vB7&r!7TjSQS^#zj5{_|}dXpXB;Z-epLe;{o3Le@9pT z6;G*H&&Fi(SM)7*VQA>(Yg{_Z)6E=UMva+T8M%YMeT*pcPIyt6U*^>~dKK?8Pb+he zAwkj(gfY%_%^aQl&s0f8b-f`~4|Dc1+W_+nlj_p{pqhRM)rqfFuhJ^zQ-vEcT_Mv| zawNz!i5?_tn0l2`?MkUOrBp~MHPe8p)$O0aYyop_6ThasvWYPTHt&O-H819_ND(Pb zj5#9B*WknyPDJ5^6pm0hA2z_LwbL%MNax0@B$I+(x)~mP(@7pohA@lt(Gqv^vI{ff zeXL;Ge3%O?Q+lU~m48HpraB-0%*4{2E7ioIKX4=899zic1F^+iJ{bEXmv4zJ=Uibv z-E28Oy_~xdxYieVjXP(W^)nT4o0xaFC+|{^O)OxGu=iZtSudr+&G@*ZxQr||h&hHq zezU={7Ffa-pX4^Y*RX`2{1VdD5@MgZu(?gY7M2lU1=U&}zLod^iFZhtXP3XE^&TUI zCpE-rMLeOpJ*K)n>Jv}a5a-{~_aA-sVa5K1@4)utd>|fpd2WMv%I=fXAlD%|zd;;D z48f}599Ep&inCL3w)w7%^I(~E4XZL?JV`ASX39 zHLoN!g^NLiL5!V2l#xLozbIWlt28gOMBlNvIJKyRhe4b{f{}qGEip5PkwH|$Co8cm zQ9ma!FI_*lq$o2l-C8qjau16MBh%!AEG~ge4E#Wg*%*K(0cm!yBN%}^pqP;04hG?k mKo%1N7m(xv(hLlo46HyFH;}~xQ3a%VfjmYANg&C@AO!%RHYbY! diff --git a/src/StringCalculator.java b/src/StringCalculator.java index 487916b..34f9f5a 100644 --- a/src/StringCalculator.java +++ b/src/StringCalculator.java @@ -1,9 +1,58 @@ +import java.util.List; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +/* +Implement a simple String calculator with a method int Add(string numbers) +1. The method can take 0, 1 or 2 numbers, and will return their sum (for an empty string it will +return 0) for example “” or “1” or “1,2” +2. Add method to handle an unknown amount of numbers +3. Add method to handle new lines between numbers (instead of commas). +1. the following input is ok: “1\n2,3” (will equal 6) +2. the following input is NOT ok: “1,\n” +4. Calling Add with a negative numbers or invalid input (not numbers) will throw an +StringCalculatorException +*/ public class StringCalculator { - public int add(String numbersStr) { - // Returns the sum of the numbers given in numbersStr + // Main function + public int add(String numbersStr) throws StringCalculatorException { + + int val = 0; + if (numbersStr != null && numbersStr != "") { + try { + // Remove the "" from the list + String[] numbersArray = convertToNumberStringArray(numbersStr); + numbersArray = removeEmptyStrings(numbersArray); + + for (String numberString : numbersArray) { + val += Integer.parseInt(numberString); + } + } + catch (IllegalArgumentException e) { + throw new StringCalculatorException(); + } + } + return val; + } + + // Beautify this class and handle errors + public String[] convertToNumberStringArray(String numbers) { + + String[] arrayOfNumbers = numbers.split("\\s*,\\s*"); + + return arrayOfNumbers; + } + + public String[] removeEmptyStrings(String[] numbersArray) { + + List myList = new ArrayList(Arrays.asList(numbersArray)); + myList.remove(""); + + String[] myStrArray = myList.toArray(new String[0]); - // not yet implemented - return 0; + return myStrArray; } } diff --git a/tests/StringCalculatorTest.java b/tests/StringCalculatorTest.java index 4ec9afe..b6f72bc 100644 --- a/tests/StringCalculatorTest.java +++ b/tests/StringCalculatorTest.java @@ -3,10 +3,124 @@ import org.junit.Test; public class StringCalculatorTest { + + @Test + public void test_add_valid() throws StringCalculatorException{ + // Arrange + StringCalculator calculator = new StringCalculator(); + String testString = "11, 2, , 3, 31"; + + // Act + int returnedValue = calculator.add(testString); + + // Assert + assertEquals(47, returnedValue); + } @Test - public void test() { - fail("Not yet implemented"); + public void test_add_with_zero() throws StringCalculatorException{ + // Arrange + StringCalculator calculator = new StringCalculator(); + String testString = "0, 2, , 3"; + + // Act + int returnedValue = calculator.add(testString); + + // Assert + assertEquals(5, returnedValue); + } + + @Test + public void test_add_zero() throws StringCalculatorException{ + // Arrange + StringCalculator calculator = new StringCalculator(); + String testString = "0, "; + + // Act + int returnedValue = calculator.add(testString); + + // Assert + assertEquals(0, returnedValue); } + @Test (expected = StringCalculatorException.class) + public void test_add_empty() throws StringCalculatorException{ + // Arrange + StringCalculator calculator = new StringCalculator(); + String testString = " "; + + // Act + int returnedValue = calculator.add(testString); + } + + @Test + public void test_add_null() throws StringCalculatorException{ + // Arrange + StringCalculator calculator = new StringCalculator(); + + // Act + int returnedValue = calculator.add(null); + + // Assert + assertEquals(0, returnedValue); + } + + @Test + public void test_removeEmptyString() { + // Arrange + StringCalculator calculator = new StringCalculator(); + String[] testArray = {"21", "1", "", "15"}; + + // Act + String[] returnedArray = calculator.removeEmptyStrings(testArray); + + // Assert + String[] expectedArray = {"21", "1", "15"}; + assertArrayEquals(returnedArray, expectedArray); + } + + @Test + public void test_convertToArray() { + // Arrange + StringCalculator calculator = new StringCalculator(); + String testString = "1,15\n , ,3"; + + // Act + String[] returnedArray = calculator.convertToNumberStringArray(testString); + + // Assert + String[] expectedArray = {"1", "15", "", "3"}; + assertArrayEquals(returnedArray, expectedArray); + } + + + @Test + public void test_add_plainString() throws StringCalculatorException{ + // Arrange + StringCalculator calculator = new StringCalculator(); + String testString = "1,40\n, 3"; + + // Act + int returnedValue = calculator.add(testString); + + // Assert + int expected = 44; + assertEquals(expected, returnedValue); + + } + + @Test + public void test_add_plainStringWithEmpty() throws StringCalculatorException{ + // Arrange + StringCalculator calculator = new StringCalculator(); + String testString = " , 2\n , , , , "; + + // Act + int returnedValue = calculator.add(testString); + + // Assert + int expected = 2; + assertEquals(expected, returnedValue); + + } } From dd5af799e06fe4573a2b037c9f3dd6627fc90f0a Mon Sep 17 00:00:00 2001 From: Kalle Vuorinen Date: Mon, 8 Oct 2018 20:56:30 +0300 Subject: [PATCH 2/3] Refactor assignment done --- bin/.gitignore | 3 --- bin/CalculateMethod.class | Bin 0 -> 1309 bytes bin/CalculatorUtils.class | Bin 0 -> 1149 bytes bin/NumberObject.class | Bin 0 -> 957 bytes bin/StringCalculator.class | Bin 1742 -> 973 bytes bin/StringCalculatorTest.class | Bin 2718 -> 2679 bytes src/CalculateMethod.java | 23 +++++++++++++++++ src/CalculatorUtils.java | 27 ++++++++++++++++++++ src/NumberObject.java | 34 ++++++++++++++++++++++++ src/StringCalculator.java | 44 +++++++------------------------- tests/StringCalculatorTest.java | 8 +++--- 11 files changed, 96 insertions(+), 43 deletions(-) delete mode 100644 bin/.gitignore create mode 100644 bin/CalculateMethod.class create mode 100644 bin/CalculatorUtils.class create mode 100644 bin/NumberObject.class create mode 100644 src/CalculateMethod.java create mode 100644 src/CalculatorUtils.java create mode 100644 src/NumberObject.java diff --git a/bin/.gitignore b/bin/.gitignore deleted file mode 100644 index 249513b..0000000 --- a/bin/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -/StringCalculator.class -/StringCalculatorException.class -/StringCalculatorTest.class diff --git a/bin/CalculateMethod.class b/bin/CalculateMethod.class new file mode 100644 index 0000000000000000000000000000000000000000..12757afbc6b58a73c74cfd180ef86378f1c5ba7d GIT binary patch literal 1309 zcmZ`&$x;(h6g@9=(jhiOfFK}Fh|&Q8ML=axkug;PtzxL6+}MOyp|R=ZFMgjwP43C2qd%rl${i)XLQJfelr_lh2jvG}2^8EF{ zb_xb=;+8;H&T|i>AFO#HR+u;A`_`dApLrEA{qCww5xryJE_zs}a7n9-(r(sBNpGm6 zUIX{>fJv2J%1J4+cA+kq2GZ!~yZCa?JCO5x`@vzznh#>utW~3a0uM2yV~}rD8Cu2- zWM29PhVe)szHj*jNt-~b)*v#fgAoHyFv?)Iy5d3$B}uavzqh{gUQ&EC{sLm?Raw>J|N*T(H%5X}b_|`6CV~5|jps^1A{N zp7_(a>bwne7u=)$Cy0M7xf5KK8%(&y)d&N)H}EFVh$ezG^Q`ffR4^h+i-KDp7&u1j zDLRjFTOIG6qL0VAX?5P5h@Fi`>&CSsw06c)+Q>@x;3)>)Pk+)xN=rpQpZ^-@KE~rC z7|Y+0+&sb959W=3DG`{%A|^;l(Hklei*v0>%3nRhr!>aJ<8-krA% zVM0KEAC_17GmyuWj>*1)RIrHx#so59%XL_t?#0TfEO$Pqz^Elv?0i(hh{|6;&Dg+h z`W^dOvlVp}4WY&21=x$E>$uLuag}XOq8e9Tcf!cPJZ|V%=#_Em4NWX!iNmo%2^3iF zBU7`hl~hS_n1s~~%;Kh;+ls(+(%9I$?Yl0g?f71;v_FKB07g*3Egh?D!l^Ww#l#w_ zq*gTxOr4!jkNK?(zhmMq?y<>{pG>pACq3}lJ|#9CGXiEZoFq8g?5bkN2kR0rnzHc; zu+YDN-Bxc2mj(hi&d+?43u)~7?Vw>lcjPut4lL}N>;@LV2f^0_p4=v6dFs4X`OoGd zQ$EJfSAJ+PcuF@27~yFu0RJ!XHjGh>(ISJlh}NX7oE!hfg{*wxMI|s|he_CIoTQ+D zxQr{r@Ihl5GfXp#tGJe=`%G<8`F{SCN7`CuMu+BV#tPQU#fQj&iI$69>?@f5V7vp)cTs~ayN-)G8nWxT*ny+a8pTPJJ9-;V<`i@= zT1>9V!FCM=LWzXB+J z8zdd)A<`*hY_PW|SpK;{oQuUOokp)>G1e|?eo9;T~w?{6J#bU(5(jH)~-3lSz7b+{e=vNB4hx=PX`pkC|Z7$@PLQei8M4nHC JJkS##{sm2BsPkQ#)lVLE_ zp>g*}p2)f<{XzY0@5r%3frS^Y?}jf0lI2QQK-&xYj)5f7CQ?`sSZ=w#vp@dSbB6C_ z&vOKFt-zLER}Nj3Uv6sQp*vD%v%F0r%YI+LDz~oLszODx|&9z`Ye=6~?JI#$`k)CQ;Rgoi=jKnZCB0_!F=aGSokqZpRlUFo@$ zn=QBgW@=VGs9SeU+{1l=G#!YHr5|&ZswqEmY(zX|%3R~@Bd(Z^Vd-BsB1{q$H%Oai%&DdSLS;<}(AMP!EJrXIAG*5TvRTEPm%t0tTZx1~Rz8XvPIxGt2~*u*|9z{%g## z5zJS@rnvLy9QlLV1XlYTrGp99_LI9>b?XebzQEY#dS_R&v{P0lBc3%fff#Az7z_L? ztfPocj!bbkV$@4+;`8JIS<@WLpyT>en!9qp8o;0A;k0m literal 1742 zcmZ`)OIsUN7=BM~lcZB2iD{b_X$!^X2C*%oB@j)KR%i$+h!5(*A&hbAWG2sK!XtZk z{t6d9-MG*V^zv9;x$vj>BgFU23<)4EX6Bsl@_z4kIcNU*=fx`kv-ng&NMLlsbquS$ zq?xV0skyeJAVTRAZBMJ1n$@nX?>y04u0U+Tune~*5Y8921R_iJuAW2~2^CSq1V$Q$ zr8oPX9o^Z~c1&F$-LPAlxurRV+y}yl`;F0)y0dYsMAmk91+w|ZFuHG5EvyJ6m%nT2 zUDvR!o`SSM?kvJUAIIwgNJ8L}ip#hnaJ6Myd%ELp+CD?yweC3DzQFDC0)Fvd5)$yL zifb4ne@E}wd-`&x>+bttOe&v0$E$FTEQxX4P;gx!HB5EIa`m?EsJMv{fp}MQdOBrE zq>xZ>OJL%Jt!e6Q&8$1^en+?5LFTNI<+Y$kQnJcJ7oVl9@}6c22v$@LY=b&v&S5$* z^4;mj#@;#syYfFw80g}LtF^ve)4E>k6})w7u6#fR#W?N>C|~x9Wj;w%@V1IM*|cb{ zYZ{z9C7>zrnkGB8{!i%Lp@u-x}{DgY3bbxHL zIDLRzb9#GTc{LXc&qbdin^UsUyYrE;T;v(v_-gU{sK`dMu^*5AehRhu5~=M&O#D9f zGtpJlP{$;xOI9-;pUaGOg_>(fV~neDlyRLm=s0a}(s}|9=&_17J?k2CA+LbFTuo6U zh_Q;>$n%?~e*s0tC^Lr=wGkr3xtpeJhTdgFj_4LwAQV*i+=1}kNF5=8a3Gi3$vClj z$?+}A`JqDRYmgjns(6Yxx mA8ZhO%BzU1e-2HoGx#K*kGv{?8d;(hP-4Uw1QF~OalyK!ev~FgqzMrr!Stf9 zV4OQmd^Ur_jkpfKv^f?P1{GsWE` zW$u}8_Kd2Sb52&>H=#469_=)pRja#-g)PJMM^f>7x{CT@I2gPmQ-0<3+c|7=%Ih^H z?@j9^jw~4SK5;p=^_3`g^wlWt(AT2a)e}*1aF@x@{kJ+1m4cyNX1C?8g)g>?4zbf@ zn5Bo13zWFT9ET)(c7Fy*4oj4wS88)8dRlaITU<-zF7x8qlD;Fpg%+tR(J?ta*{wEe zUjKnw4BN;;>j>yy#dT0jx{`50Zt&3_?R9mEY!3mnC M;*WbZd6&iVFDLq1Bme*a delta 579 zcmZ|MO-~a+7{KxW>`uGerHypmB}i1DqSdw>N-;6Da6ptIw4w!c74Ri$Ofbeo6Qjg% z@#w)g7vsUZ2V)u&H5&Bpm+^-OOiiP4)Z=f(xD0u|TCs|<8{IaLr3kp@* zs&ZEcw#y}RO%JP;chB^y6}yRre(nTn+=NcX&Y?}&=})Cm93h7-`!Vw-)^FCFhw0a7 zV&XdSnIQT=&#d|5^sd+Ph4)O>;~SJC+pjbt?T)}26Bh{wlSa`Db5tnre zmnwtIkflzAGfXf?m)wlD>ysoUCzs`0a3r%97nEYoe0RdW z7aicpHqbxY(lzSlt=qGH{=cFH>9r_=h%`&&S*FO!KcbNxQLZEE5=oZBB1(&{Ey}k= zEl?zr+U$}kws_t6V7|suyPtH3`*(;J&3xiOcwGcHq~k5Aw@S!u_HoBNO^m6f*8BfR j_-fhwPGrJ+5_w-DA4udQ`RO%zk;kUwjX9U4o5hvCsf=3Y diff --git a/src/CalculateMethod.java b/src/CalculateMethod.java new file mode 100644 index 0000000..f8af3c4 --- /dev/null +++ b/src/CalculateMethod.java @@ -0,0 +1,23 @@ +// Refactor: Extract method + +public class CalculateMethod { + + public int calculate(NumberObject numberObject) throws StringCalculatorException { + try { + // Remove the "" from the list + numberObject.setNumbersArray(CalculatorUtils.convertToNumberStringArray(numberObject.getNumbersStr())); + numberObject.setNumbersArray(CalculatorUtils.removeEmptyStrings(numberObject.getNumbersArray())); + + int val = 0; + for (String numberString : numberObject.getNumbersArray()) { + val += Integer.parseInt(numberString); + } + numberObject.setValue(val); + } + catch (IllegalArgumentException e) { + throw new StringCalculatorException(); + } + return numberObject.getValue(); + } + +} \ No newline at end of file diff --git a/src/CalculatorUtils.java b/src/CalculatorUtils.java new file mode 100644 index 0000000..494035f --- /dev/null +++ b/src/CalculatorUtils.java @@ -0,0 +1,27 @@ +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +// Refactor: Extract method + +public class CalculatorUtils { + + // Beautify this class and handle errors + public static String[] convertToNumberStringArray(String numbers) { + + String[] arrayOfNumbers = numbers.split("\\s*,\\s*"); + + return arrayOfNumbers; + } + + public static String[] removeEmptyStrings(String[] numbersArray) { + + List myList = new ArrayList(Arrays.asList(numbersArray)); + myList.remove(""); + + String[] myStrArray = myList.toArray(new String[0]); + + return myStrArray; + } + +} diff --git a/src/NumberObject.java b/src/NumberObject.java new file mode 100644 index 0000000..662bc0d --- /dev/null +++ b/src/NumberObject.java @@ -0,0 +1,34 @@ + +// Refactor: Introduce Parameter Object +public class NumberObject { + private String numbersStr; + private int value; + private String[] numbersArray; + + public NumberObject(String numbersStr) { + this.numbersStr = numbersStr; + this.value = 0; + this.numbersArray = null; + } + + public String getNumbersStr() { + return this.numbersStr; + } + + public String[] getNumbersArray() { + return this.numbersArray; + } + + public void setNumbersArray(String[] numbersArray) { + this.numbersArray = numbersArray; + } + + public int getValue() { + return this.value; + } + + public void setValue(int value) { + this.value = value; + } + +} \ No newline at end of file diff --git a/src/StringCalculator.java b/src/StringCalculator.java index 34f9f5a..9d5614a 100644 --- a/src/StringCalculator.java +++ b/src/StringCalculator.java @@ -1,9 +1,3 @@ -import java.util.List; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.Set; - /* Implement a simple String calculator with a method int Add(string numbers) 1. The method can take 0, 1 or 2 numbers, and will return their sum (for an empty string it will @@ -20,39 +14,19 @@ public class StringCalculator { // Main function public int add(String numbersStr) throws StringCalculatorException { + NumberObject numberObject = new NumberObject(numbersStr); + CalculateMethod calculator = new CalculateMethod(); + int val = 0; - if (numbersStr != null && numbersStr != "") { - try { - // Remove the "" from the list - String[] numbersArray = convertToNumberStringArray(numbersStr); - numbersArray = removeEmptyStrings(numbersArray); - - for (String numberString : numbersArray) { - val += Integer.parseInt(numberString); - } - } - catch (IllegalArgumentException e) { - throw new StringCalculatorException(); - } + if (isNumberStrValid(numberObject)) { + val = calculator.calculate(numberObject); } return val; } - // Beautify this class and handle errors - public String[] convertToNumberStringArray(String numbers) { - - String[] arrayOfNumbers = numbers.split("\\s*,\\s*"); - - return arrayOfNumbers; - } - - public String[] removeEmptyStrings(String[] numbersArray) { - - List myList = new ArrayList(Arrays.asList(numbersArray)); - myList.remove(""); - - String[] myStrArray = myList.toArray(new String[0]); - - return myStrArray; + // Refactor: Consolidate conditionals && Preserve Whole Object + public boolean isNumberStrValid(NumberObject numberObject) { + return numberObject.getNumbersStr() != null && numberObject.getNumbersStr() != ""; } + } diff --git a/tests/StringCalculatorTest.java b/tests/StringCalculatorTest.java index b6f72bc..b5b0c23 100644 --- a/tests/StringCalculatorTest.java +++ b/tests/StringCalculatorTest.java @@ -50,7 +50,7 @@ public void test_add_empty() throws StringCalculatorException{ String testString = " "; // Act - int returnedValue = calculator.add(testString); + calculator.add(testString); } @Test @@ -68,11 +68,10 @@ public void test_add_null() throws StringCalculatorException{ @Test public void test_removeEmptyString() { // Arrange - StringCalculator calculator = new StringCalculator(); String[] testArray = {"21", "1", "", "15"}; // Act - String[] returnedArray = calculator.removeEmptyStrings(testArray); + String[] returnedArray = CalculatorUtils.removeEmptyStrings(testArray); // Assert String[] expectedArray = {"21", "1", "15"}; @@ -82,11 +81,10 @@ public void test_removeEmptyString() { @Test public void test_convertToArray() { // Arrange - StringCalculator calculator = new StringCalculator(); String testString = "1,15\n , ,3"; // Act - String[] returnedArray = calculator.convertToNumberStringArray(testString); + String[] returnedArray = CalculatorUtils.convertToNumberStringArray(testString); // Assert String[] expectedArray = {"1", "15", "", "3"}; From af1b5234eb0669f41f987a2de5778d6f63e38ed2 Mon Sep 17 00:00:00 2001 From: Kalle Vuorinen Date: Mon, 8 Oct 2018 21:13:54 +0300 Subject: [PATCH 3/3] JDeadorant changes --- bin/CalculateMethod.class | Bin 1309 -> 0 bytes bin/NumberObject.class | Bin 957 -> 1817 bytes bin/StringCalculator.class | Bin 973 -> 706 bytes src/CalculateMethod.java | 23 ----------------------- src/NumberObject.java | 25 +++++++++++++++++++++++++ src/StringCalculator.java | 12 +++--------- 6 files changed, 28 insertions(+), 32 deletions(-) delete mode 100644 bin/CalculateMethod.class delete mode 100644 src/CalculateMethod.java diff --git a/bin/CalculateMethod.class b/bin/CalculateMethod.class deleted file mode 100644 index 12757afbc6b58a73c74cfd180ef86378f1c5ba7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1309 zcmZ`&$x;(h6g@9=(jhiOfFK}Fh|&Q8ML=axkug;PtzxL6+}MOyp|R=ZFMgjwP43C2qd%rl${i)XLQJfelr_lh2jvG}2^8EF{ zb_xb=;+8;H&T|i>AFO#HR+u;A`_`dApLrEA{qCww5xryJE_zs}a7n9-(r(sBNpGm6 zUIX{>fJv2J%1J4+cA+kq2GZ!~yZCa?JCO5x`@vzznh#>utW~3a0uM2yV~}rD8Cu2- zWM29PhVe)szHj*jNt-~b)*v#fgAoHyFv?)Iy5d3$B}uavzqh{gUQ&EC{sLm?Raw>J|N*T(H%5X}b_|`6CV~5|jps^1A{N zp7_(a>bwne7u=)$Cy0M7xf5KK8%(&y)d&N)H}EFVh$ezG^Q`ffR4^h+i-KDp7&u1j zDLRjFTOIG6qL0VAX?5P5h@Fi`>&CSsw06c)+Q>@x;3)>)Pk+)xN=rpQpZ^-@KE~rC z7|Y+0+&sb959W=3DG`{%A|^;l(Hklei*v0YuW6g`)(!Es6zTl<0dfsGWTP^-n-VigNk6soq>q^_LeNYG)13{zrPXyV$0 zuyX0bbi<}GL9DUvT=-*L_ydY}rnPbB=DmB*yZ5|v?t9;a_dfCG-p($7D_GtZx2bWg zTwB_xtSiQfX*`zI@-u>SJn}>YVO&B0r@V*~IO|(6<>JeNTwRsdRfTY*D67Q{RW>;m zv#*Lu)hz2;O+bP$!enKwv~W38O__t1E`N zsvqiNsF*c z+BM{7FoqD5O)%i%EN;{PX2iqDa?~R3VzPsz6*gwNnB~}+;$&uR*1el_Ip??FA8`k# z3V~P`^G{Q6ofI5&edzs)20F-WLCSwceC;!Cf9Iyfwyh(L3~~o5<2cG!#dw{-NhDb9 zBxn3#cu(<~<{y&5G_puOM*%aoohYkieFt`i5y3rpZ8rk)tlh!oUanqZ%rYB-tA{W= a0*J>?0`3F89-HNm0RcIy`vF%v@bC`}^{Na2 delta 36 scmbQqx0jvk)W2Q(7#J8#7}Pg%ZDgFhgV~9ZZS!yDU5u;@3``7a0O-F8t^fc4 diff --git a/bin/StringCalculator.class b/bin/StringCalculator.class index ab1e475bfbf1d75b30c24570df04bc2b5c03cfc0..e3f94ffd1135787daa05b4afb1f7434385911f2d 100644 GIT binary patch delta 240 zcmX@heu$Op)W2Q(7#J8#7&JF>@iN+SF$gnA@-Rp-NHa1BWET6C<|d^U1(y_sCFW$N zFfuS}XhwmQ$nr4AF~~DAa3&|_B$wtSmZXB@CU-HqP5#IzG1-C1fRSl(AyY_w0|PSy z3($PY-3-E!+S?gKeVOfawlPS|WZ(c&GIp|SfRfA%TtHHcffYy!GH?RT=VlOL5MmHz z5C=kTpr{ta5C$FwULX%>9D@RbA_LHV1_1^o24w~&pejBF6$VwHS!zIeP6o!m4C3qz PJi?4XRq8+yCI$@v`JN** delta 528 zcmZ8eO-lk%6g}4&o#r(b=}g#n_Ni&vhqTCL5CmF;Zff_O2K$&YY;^07aMh+=yEbhK z3W8d+2>KQM59y9lfjl^u_wKpp9?p9Yere*f{rn0bi|m64)0~D8!r-=a?Yb*Hr{H)e z)nkDebOFM+feB2u;$&?NCGvaqi?UPOFP}NKmrEY`tZ4&r%n)?@SAo#WY?WxIDSipn z8Z+`e3v&deAzcFP62e7K+UEs%Rgz`b5r|^hzzQn4y?C=Srd&;J| zlzzn64a73nsZG^V@0qDUFpeU`I0PLLMw5?)aSUUYW9a8jwyO#QVZO0GcjnlK&JoV@ zEx=P27Mn=0pvfXhEI~zzsRpQxSq)JQG0woxoKfS>0gnZ^nyE*mKQQ2z$m$(}>b>%B fEyQf_ly76W%m1@sc9v6Tj{=JL-@4Ac05*OA^~+q3 diff --git a/src/CalculateMethod.java b/src/CalculateMethod.java deleted file mode 100644 index f8af3c4..0000000 --- a/src/CalculateMethod.java +++ /dev/null @@ -1,23 +0,0 @@ -// Refactor: Extract method - -public class CalculateMethod { - - public int calculate(NumberObject numberObject) throws StringCalculatorException { - try { - // Remove the "" from the list - numberObject.setNumbersArray(CalculatorUtils.convertToNumberStringArray(numberObject.getNumbersStr())); - numberObject.setNumbersArray(CalculatorUtils.removeEmptyStrings(numberObject.getNumbersArray())); - - int val = 0; - for (String numberString : numberObject.getNumbersArray()) { - val += Integer.parseInt(numberString); - } - numberObject.setValue(val); - } - catch (IllegalArgumentException e) { - throw new StringCalculatorException(); - } - return numberObject.getValue(); - } - -} \ No newline at end of file diff --git a/src/NumberObject.java b/src/NumberObject.java index 662bc0d..8662812 100644 --- a/src/NumberObject.java +++ b/src/NumberObject.java @@ -31,4 +31,29 @@ public void setValue(int value) { this.value = value; } + // Refactor: BAD SMELL, JDEADORANT MOVED + public boolean isNumberStrValid() { + return getNumbersStr() != null && getNumbersStr() != ""; + } + + // Refactor: Extract method + // Refactor: BAD SMELL, JDEADORANT MOVED + public int calculate() throws StringCalculatorException { + try { + // Remove the "" from the list + setNumbersArray(CalculatorUtils.convertToNumberStringArray(getNumbersStr())); + setNumbersArray(CalculatorUtils.removeEmptyStrings(getNumbersArray())); + + int val = 0; + for (String numberString : getNumbersArray()) { + val += Integer.parseInt(numberString); + } + setValue(val); + } + catch (IllegalArgumentException e) { + throw new StringCalculatorException(); + } + return getValue(); + } + } \ No newline at end of file diff --git a/src/StringCalculator.java b/src/StringCalculator.java index 9d5614a..897ef33 100644 --- a/src/StringCalculator.java +++ b/src/StringCalculator.java @@ -15,18 +15,12 @@ public class StringCalculator { public int add(String numbersStr) throws StringCalculatorException { NumberObject numberObject = new NumberObject(numbersStr); - CalculateMethod calculator = new CalculateMethod(); - + int val = 0; - if (isNumberStrValid(numberObject)) { - val = calculator.calculate(numberObject); + if (numberObject.isNumberStrValid()) { + val = numberObject.calculate(); } return val; } - - // Refactor: Consolidate conditionals && Preserve Whole Object - public boolean isNumberStrValid(NumberObject numberObject) { - return numberObject.getNumbersStr() != null && numberObject.getNumbersStr() != ""; - } }