From 494b7a8fce425fc540e1ce170637c058699a553c Mon Sep 17 00:00:00 2001 From: idomingo Date: Wed, 12 Oct 2016 16:42:02 +0300 Subject: [PATCH] 12/10 Lab Session --- bin/.gitignore | 2 + bin/Spreadsheet.class | Bin 613 -> 3463 bytes bin/SpreadsheetTest.class | Bin 490 -> 2727 bytes src/Spreadsheet.java | 118 +++++++++++++++++++++++++++++++++++-- tests/SpreadsheetTest.java | 69 ++++++++++++++++++++-- 5 files changed, 181 insertions(+), 8 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..c6ff102011f6c853a8fab5d3f219d8f79a17cd09 100644 GIT binary patch literal 3463 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 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!E#36G3DG}Y>-aToDU z#F$+pxoo9kIIfBr%+jDSdbvA|r2mnltiOYMW6q%4J#53l17p+eoI0w7aO8gE_#nQrhD?LYO~-9mbrIvxhwff)_WUQu)+iK#hNV3eH9O6 zS(G5Az<4lxZGDjOj(p6vP!`-iT0W?I!sa!J89p*dFI8B4K{WF6vx!b{Gpe^Vvw zs#{xA@GYfV4;2)+iJ7m8(iF$b&5z?vWJMcsUNX++ih@_XNSTEsM|-toSk`E(WTd+0 zH1NwC*q`|-173+hyKB7PGvK@z)KKRdFY2G2$cC^6py!NZ) lAGS0-#J&w|QN7KUm}Ap;#{YGmH{}qk=Mb$MKcXfA<9|Ya)5!n; delta 280 zcmZ23`ihzB)W2Q(7#J8#7^Ek1=}z>QVC0-IUw(-~Won5+ zW^O@FYHn&?Nooogg9w8dJA)`AgFt>!x_(w^US^5DV{vh6Q3(%&ID-Tu14~+BW)35R zsD@8gVp*boPGVlVesD=qW?s6rX4vFr7TtOV1||kZ237_(AjuANfY!u4J3IW3V<{(kjKct2b5)E;D@Rb0ILJ}1!54Jkl+pmVT4IsK(!1& Wb6A18xfvv3#<9VT0}26^NC5zD2P$0v diff --git a/src/Spreadsheet.java b/src/Spreadsheet.java index e4f120b..d12df52 100644 --- a/src/Spreadsheet.java +++ b/src/Spreadsheet.java @@ -1,18 +1,128 @@ public class Spreadsheet { + String [][] sheet = new String [20][20]; + String [] abcd = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T"}; public String get(String cell) { - // to be implemented - return null; + String letter = cell.substring(0, 1); + String column = cell.substring(1, 2); + int columnNumber, rowNumber; + + rowNumber = searchCellRow(letter); + columnNumber = searchCellColumn(column); + + return sheet[rowNumber][columnNumber]; + } + + private int searchCellColumn(String column) { + boolean found = false; + int counter = 0; + while (!found && counter < 20) { + if (column.equals(String.valueOf(counter))) { + found = true; + } + else { + ++counter; + } + } + return counter; + } + + private int searchCellRow(String letter) { + boolean found = false; + int counter = 0; + + while (!found && counter < 20) { + if (letter.equals(abcd[counter])) { + found = true; + } + else { + ++counter; + } + } + return counter; } public void set(String cell, String value) { - // to be implemented + String letter = cell.substring(0, 1); + String column = cell.substring(1, 2); + + sheet[searchCellRow(letter)][searchCellColumn(column)] = value; } public String evaluate(String cell) { - // to be implemented + String value = get(cell); + for (int i = 0; i < value.length(); i++) { + if ((value.charAt(i) == '+') || (value.charAt(i) == '-') || (value.charAt(i) == '*') || (value.charAt(i) == '/')) { + return calculator(value); + } + } + if (value.charAt(0) == '=') { + if ((Character.isAlphabetic(value.charAt(1)) && (Character.isDigit(value.charAt(2))))) { + String refCell = value.substring(1, 3); + String circular = "=" + cell; + if (get(refCell) != circular) { + return get(refCell); + } + else { + return "#Circular"; + } + } + String realValue = ""; + for (int i = 1; i < value.length(); i++) { + realValue = realValue + value.charAt(i); + } + value = realValue; + } + + if (isANumber(value)) { + return value; + } + else if (isAString(value)) { + String realString = ""; + for (int i = 1; i < value.length() - 1; i++) { + realString = realString + value.charAt(i); + } + return realString; + } + else { + return "#Error"; + } + } + + private String calculator(String value) { + int calc; return null; } + + private boolean isAString(String value) { + if ((value.charAt(0) == '\'') && (value.charAt(value.length() - 1) == '\'')){ + return true; + } + else { + return false; + } + } + + private Boolean isANumber(String value) { + int counter = 0; + if (value.isEmpty()) { + return false; + } + if (value.charAt(counter) == '-') { + if (value.length() > 1) { + ++counter; + } + else { + return false; + } + } + for (; counter < value.length(); ++counter) { + if (!Character.isDigit(value.charAt(counter))) { + return false; + } + } + return true; + } } diff --git a/tests/SpreadsheetTest.java b/tests/SpreadsheetTest.java index 9e0936a..32c601c 100644 --- a/tests/SpreadsheetTest.java +++ b/tests/SpreadsheetTest.java @@ -5,11 +5,72 @@ public class SpreadsheetTest { + Spreadsheet sheet = new Spreadsheet(); - @Test - public void test() { - fail("Not yet implemented"); - + @Test public void testSetA4_12() { + String cell = "A4"; + sheet.set(cell, "12"); + assertEquals("12", sheet.get(cell)); } + + @Test public void testSetB12_4() { + String cell = "B12"; + sheet.set(cell, "4"); + assertEquals("4", sheet.get(cell)); + } + + @Test public void evaluateString_StringWithQuotes() { + String cell = "B12"; + sheet.set(cell, "'thisIsAString'"); + assertEquals("thisIsAString", sheet.evaluate(cell)); + } + @Test public void evaluateUnquotedString_Error() { + String cell = "A1"; + sheet.set(cell, "'thisIsNotAString"); + assertEquals("#Error", sheet.evaluate(cell)); + } + @Test public void evaluateInvalidNumber_Error() { + String cell = "A1"; + sheet.set(cell, "324as"); + assertEquals("#Error", sheet.evaluate(cell)); + } + @Test public void evaluateNegativeNumber_minus10() { + String cell = "F2"; + sheet.set(cell, "-10"); + assertEquals("-10", sheet.evaluate(cell)); + } + @Test public void evaluateStringEquals_StringWithoutEqual() { + String cell = "D9"; + sheet.set(cell, "='thisIsAString'"); + assertEquals("thisIsAString", sheet.evaluate(cell)); + } + @Test public void evaluateNumberEquals_NumberWithoutEqual() { + String cell = "C5"; + sheet.set(cell, "=-15"); + assertEquals("-15", sheet.evaluate(cell)); + } + @Test public void evaluateStringEqualsWithError_Error() { + String cell = "C5"; + sheet.set(cell, "=='thisIsAString"); + assertEquals("#Error", sheet.evaluate(cell)); + } + @Test public void evaluateRefCell_valueInF2() { + String cell = "C5"; + sheet.set(cell, "=F2"); + assertEquals(sheet.get("F2"), sheet.evaluate(cell)); + } + @Test public void evaluateIncorrectRefCell_Error() { + String cell = "C6"; + sheet.set(cell, "=2F"); + assertEquals("#Error", sheet.evaluate(cell)); + } + @Test public void evaluateCircularRefCell_Circular() { + String cell = "F2"; + sheet.set("C5", "=F2"); + sheet.set(cell, "=C5"); + assertEquals("#Circular", sheet.evaluate(cell)); + } + + }