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 92b411f..e41e0fb 100644 Binary files a/bin/Spreadsheet.class and b/bin/Spreadsheet.class differ diff --git a/bin/SpreadsheetTest.class b/bin/SpreadsheetTest.class index e7086bd..6c97b19 100644 Binary files a/bin/SpreadsheetTest.class and b/bin/SpreadsheetTest.class differ 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); + } + + }