From 944a8e67702c0bd504513bb4f70d1f4de169e3a0 Mon Sep 17 00:00:00 2001 From: hhe Date: Fri, 14 Oct 2016 16:56:03 +0300 Subject: [PATCH] #10 Finished --- bin/.gitignore | 2 + bin/Spreadsheet.class | Bin 613 -> 1877 bytes bin/SpreadsheetTest.class | Bin 490 -> 2279 bytes src/Spreadsheet.java | 81 ++++++++++++++++++++++++++++++++--- tests/SpreadsheetTest.java | 84 +++++++++++++++++++++++++++++++++++-- 5 files changed, 158 insertions(+), 9 deletions(-) create mode 100644 bin/.gitignore diff --git a/bin/.gitignore b/bin/.gitignore new file mode 100644 index 0000000..2079672 --- /dev/null +++ b/bin/.gitignore @@ -0,0 +1,2 @@ +/Spreadsheet.class +/SpreadsheetTest.class diff --git a/bin/Spreadsheet.class b/bin/Spreadsheet.class index 92b411f05752a6cee6d06c9769e1b70d40aa0840..e41e0fb7688cbb974b11a0fd9e9e35337cf15570 100644 GIT binary patch literal 1877 zcmbVLO>Y}j6g|(L#9!mYaqJLCoil z>Jq6!LPG3|keniha1BL zW7YH~L$J`Z3!>w$YBc<8qMvNC-^J-n$QZ}DQziBi*Lq7Fmj{z4)@|>G=#(|X;Czp7 z!dV-`z^-bvXc%{sbBmwBt-mU{$;r*gm_?i_cUn|=y|>cg(^L81r0JG4&Ox;_KVq1Z zk%B@uU}*KKRTCGN=Ya(oX)IEpTvN?kgeWEQ$sCU?$#@aVq?%@Ht10BbFqX*YdpG3F z>%~>-FuiV?4U^AsUB(JlNwnog-BR^>^S1VYA$rCv$+tOFM#c@EKd8OmQjMk;FA?l? zPB+UfLp2$gPEVemZMyxErIz0%l{<3rml`dztZnFAJE0zBEbwc=6lu*(|0CK57aYAk zbaIK47e4sO6Ch8DeEbvm3G!P982Sz)-_X&8QTpX&pz?_D@Ma`ur!Y-#5uH0g^mK_^ zl*o1h#_$|9@R9hQcZ$~ufa3;`ULxodjmGR`oW})<2Iw?J z7RSGcX{Tj@#^nS1sbxy(;?n(NQg*)}bsG}>F4&n4F^B z2fVXQw&>0hL{h3;m6TW)^PwAiY*L9y?{GWbMp&`K;<$(TqtG5EPlkq-fy30xo$!?o zVJH&!baAEjNyKRF5eCEAj>Dvl4{WQSN6HDD!9rk46+-1K+}VA^ z?c~MB2-?=lmk8O`e47BTbRN1{j8lF5><{HM@z0(W_wkV;MJ3+y2zN~34%*Qk0)4@u z&5)o)?~Dv6*%IlGv_1H|zO zlK32RXhXphEZ{dR;!iB$FI>al$lxDjSr9i_2pKkk9E)LwrLn=5kY}s7&F-SW?xV;) z#2xk!ud$EuI@`w^>?^Xr$2}p%Wm{T@Qe+2?6a(yQM~XqpzlmEkLzI1im&uZlqdBH9 k{uHYo#2A}(MP@Eua!I4I%NOySi$sL!Ar-$ui7u@F3$Pi30ssI2 literal 613 zcma)2%T5A85Ug32hdcyd=us~U9OPoWVDw<(X`=@W_hFg9kaaQ3!guM(#DgE;M;WVk zH%i1rFWuGCT~*!l{_*+-;0y;vI0}{iV`TJbJ~1XP!c}NY^-^~O9ge$q!>RFOg~Ejm zZG5SaYqbXo?)7YB%E)1(iaZJmb8p! zWsjm`LyzN@_ifydBO8u;?e!3_7kd>|6Dom7%D9YHljB!Un7|2a0DBy&|#FW|0;@q_D_+KUpL=%62 zKg#&F>u%6w%d(#Kob#RM{l4#Q|Ni^+2f!>&{O}2M9DX%4^`rSo)2t)SwESom=sZ); z)mT=|Wn%lMXIk145T-y|vTE~FftF=Gr(4einnoijf#!|;M=gLR1ZDUk`Ozj2tcnOg zMz9q;UdAo7ke$?X+Fs$ysb(Chr&&!vN#@gPHl-T6{p?OQTc32&yQ=B7R9k_?@k3nT z?m;1E>0h*zZt9Foz?lTip zW3u7VWTgU!mZ9e|PjAjdQg-A684oec$c!C1;t?6S85+Q2g#8$yxQe!fX=;WgV-yhq zS#_Q^zZKLhbEr{N>`ApEcgF5Qi=ml?ETt$nv894dOPFK@CY;o#WW?G1%Agm6VPJO}>*bk}nSlTuxf&OSMZ!68uOGwZi zE9Hf7X=Opea~@n-DJ?8Y*tXloBX`+04lh~tmBd_W1NHceewdQ5@2s)KZ-^h>(2aB< zt5UtYg9}HDTZxawqpSw&CYWpBFkdjz+Lms6vAfE;wrwVDOW*s+A?ivk)ic)!sZmnLNFA?3U2TZER!jBF zb&AwDsnev+)S<37MBS*Rdgi)7>LRI2q&}%b-Snh>c0C++jJu`ml&Q*#@~va%o!S7N5rd! zMC_H*zb@jnS0(l+VxJ;jQ^XsJIH)7yz*EHaPs(9ggwun!wdCT5EJgA=n&6lwIH{s~ MeNx`BXFeSN2Tw^#AOHXW delta 301 zcmaDZ_==h9)W2Q(7#J8#7^Ek1=}NNMWaed-*fBCNYiNcsGO#%3r=)T*Ff(vYZ1H4e zDM>9ZnRvx8Oo)*|*e}0Cp)$2ZAv3oiCp9-UuOu~vi$R1zjGaN0kwGB8C|y6R6lj#b zV{vh6Q3(%&ID-VxytKs397YCF4WF#UvPAuy#JqI<;F6-uymV{Lu*p))y7deUObm<+ ztPE^Gk{#$SeIU&Uq*=ALGjMDKGME^+fFwwo0jPi*Nb*1w0BK$zkCA~7D9gma4^<@q pRtNGR#2_{y!5s|32$Q&gY8im$umW{+Gf2XWV}lz96ap%d0sywaEv*0m diff --git a/src/Spreadsheet.java b/src/Spreadsheet.java index e4f120b..53aab48 100644 --- a/src/Spreadsheet.java +++ b/src/Spreadsheet.java @@ -1,18 +1,87 @@ +import java.util.HashMap; public class Spreadsheet { + + static HashMap hashMap = new HashMap(); - public String get(String cell) { - // to be implemented - return null; + public static String get(String cell) { + String value = hashMap.get(cell); + return value; } public void set(String cell, String value) { - // to be implemented + hashMap.put(cell,value); } public String evaluate(String cell) { - // to be implemented - return null; + String value = hashMap.get(cell); + int i = 0; + int j = value.length()-1; // j=2 + //first char is "=" + if(value.charAt(i)=='='){ + //second or last char is "'" + if(value.charAt(i+1)=='\'' || value.charAt(value.length()-1)=='\''){ + //second and last chars are both "'" + if(value.charAt(i+1)=='\'' && value.charAt(value.length()-1)=='\''){ + //return chars between '' + return value.substring(2, value.length()-1); + } + //one of second and last char is not "'" + else + //return error + return "#Error"; + } + //chars after "=" can be found in other cells + else if(hashMap.containsKey(value.substring(1,value.length()))){ + //find its value in next cells + while(hashMap.containsKey(value.substring(1,value.length()))){ + //this value become next cell to be found + value = hashMap.get(value.substring(1,value.length())); + //circular + if(value.substring(1,value.length()).equals(cell)) + return "#Circular"; + //value of this cell doesn't start with a "=" + else if(value.charAt(i) != '='){ + //value of this cell start or end with a "'" + if(value.charAt(i)=='\'' || value.charAt(value.length()-1)=='\''){ + //first and last chars are both "'" + if(value.charAt(i)=='\'' && value.charAt(value.length()-1)=='\''){ + //return chars between '' + return value.substring(1, value.length()-1); + } + //one of second and last char is not "'" + else + //return error + return "#Error"; + } + //value doesn't start with a "'" + else + //check every char in value + for(i=0;i='0' && value.charAt(i)<='9' || value.charAt(i)=='-')) + //return error + return "#Error"; + } + //there isn't illegal char in value + return value; + } + } + } + //including calculating + else + return value.substring(1, j); + } + else if(value.charAt(i)=='\'' && value.charAt(j)=='\'') + return value.substring(1, j); + else if((value.charAt(i)=='\'' && value.charAt(j)!='\'') || (value.charAt(i)!='\'' && value.charAt(j)=='\'')) + return "#Error"; + else + for(i=0;i='0' && value.charAt(i)<='9' || value.charAt(i)=='-')) + return "#Error"; + } + return value; } } diff --git a/tests/SpreadsheetTest.java b/tests/SpreadsheetTest.java index 9e0936a..41e6715 100644 --- a/tests/SpreadsheetTest.java +++ b/tests/SpreadsheetTest.java @@ -5,11 +5,89 @@ public class SpreadsheetTest { + + Spreadsheet s = new Spreadsheet(); @Test - public void test() { - fail("Not yet implemented"); - + public void test_1() { + s.set("A1","1"); + String result = s.get("A1"); + assertEquals("1",result); } + + @Test + public void test_2() { + s.set("A1","-1"); + String result = s.evaluate("A1"); + assertEquals("-1",result); + } + + @Test + public void test_3() { + s.set("A1","5A"); + String result = s.evaluate("A1"); + assertEquals("#Error",result); + } + + @Test + public void test_4() { + s.set("A1","'a string'"); + String result = s.evaluate("A1"); + assertEquals("a string",result); + } + + @Test + public void test_5() { + s.set("A1","'a string"); + String result = s.evaluate("A1"); + assertEquals("#Error",result); + } + + @Test + public void test_6() { + s.set("A1","='a string'"); + String result = s.evaluate("A1"); + assertEquals("a string",result); + } + + @Test + public void test_7() { + s.set("A1","='a string"); + String result = s.evaluate("A1"); + assertEquals("#Error",result); + } + + @Test + public void test_8() { + s.set("A5","5"); + s.set("A1","=A5"); + String result = s.evaluate("A1"); + assertEquals("5",result); + } + + @Test + public void test_9() { + s.set("A5","5A"); + s.set("A1","=A5"); + String result = s.evaluate("A1"); + assertEquals("#Error",result); + } + + @Test + public void test_10() { + s.set("A5","=A1"); + s.set("A1","=A5"); + String result = s.evaluate("A1"); + assertEquals("#Circular",result); + } + + @Test + public void test_11() { + s.set("A1","=1+1*2"); + String result = s.evaluate("A1"); + assertEquals("4",result); + } + + }